Comportamientos de Drupal


  • ¿Qué son los comportamientos de Drupal en absoluto?
  • ¿Qué tipo de capa de servicio ofrece a los desarrolladores de módulos?
  • ¿Qué tipo de relación asigna a jQuery.ready?
Author: Thamilan, 2010-10-15

6 answers

Versión larga: Drupal.behaviors no es simplemente un reemplazo para jQuery.listo ya que este último solo se ejecuta una vez (cuando DOM está listo para la manipulación): los comportamientos se pueden disparar varias veces durante la ejecución de la página y se pueden ejecutar cada vez que se insertan nuevos elementos DOM en el documento.

Además, los módulos podrían anular o extender un comportamiento existente (por ejemplo, si un módulo tiene un comportamiento de agregar un efecto de rebote en todos los enlaces, un segundo módulo podría reemplazar el comportamiento por un efecto de rebote diferente).

Versión corta: es más modular, aunque la documentación podría mejorarse.


También, a partir de Drupal 7, los ajustes definidos usando drupal_add_js (PHP) o en Drupal.configuración.modulename (Javascript) se pasan directamente como segundo parámetro (el primero es el contexto) al comportamiento.

Por ejemplo:

Drupal.behaviors.changeLinks = function(context, settings){
    if (!settings) settings = Drupal.settings.changeLinks;
    $("a", context).hover(function() {
        $(this).css('color', settings.color);
    });
};

Y si uno de su script (u otro) crea nuevos nodos, todavía podría tener el comportamientos aplicados a los nuevos nodos sin tener que saber qué otros módulos están instalados:

var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');

Drupal.attachBehaviors(newNodes);
 80
Author: wildpeaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-15 11:54:02

Funcionalidad Duplicada

Tenga en cuenta que el Drupal.behaviors architecture duplica la funcionalidad que ya está en jQuery.

Además, al momento de escribir este artículo, no parece haber ninguna documentación o estudio de caso para Drupal.los comportamientos fuera de Drupal; y la documentación dentro de Drupal (como se indicó anteriormente) podrían beneficiarse considerablemente de las mejoras. A partir de este escrito, parece que la documentación detallada primaria es acceso restringido solo por una tarifa.

Esto significa que puede notar degradación del rendimiento, anomalías y resultados inesperados no consistentes con jQuery estándar que son endémicos de Drupal.ecosistema de comportamientos.

Funcionalidad nativa de jQuery

En contraste con Drupal.comportamientos, la funcionalidad integrada de la API estándar de jQuery está ampliamente documentada incluyendo demostraciones en línea y ejemplos. Por otra parte, hay numerosos ejemplos en vivo disponibles gratuitamente en sitios como jsfiddle.

Los enlaces de la sección ver también enumeran las llamadas a la api de jQuery relevantes para el manejo de nuevos elementos DOM insertados en el documento.

Véase también

 8
Author: dreftymac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 18:21:51

Junto con las respuestas mencionadas anteriormente, una de las cosas clave es que puede pasar datos de php a javascript, que es la siguiente

Pasando valores de PHP a Javascript con "Drupal.preferencias "

Puede hacer fácilmente que las variables de PHP estén disponibles para Javascript en el front-end con Drupal.configuración usando drupal_add_js() function

<?php
  drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>

O

<?php
$element['#attached']['js'][] = array(
  'type' => 'setting',
  'data' => array('myModule' => array('key' => 'value')),
);
?>

Esto estará disponible en Javascript como:

  if (Drupal.settings.myModule.key === 'value') {
    alert('Got it!');
  }
 5
Author: Sameer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-28 09:26:35

Buscando una respuesta similar y llegó aquí, todavía sin pistas. Finalmente encontramos un poco más de explicación (y ejemplos) de un artículo aquí: https://benmarshall.me/drupal-behaviors /

No soy el autor original, así que solo puedo citar algunos textos:

¿Qué son los comportamientos de Drupal?

En resumen, Drupal.comportamientos es una forma más modular y mejor de implementar jQuery.¿Listos?. A diferencia de jQuery.listo que solo se ejecuta una vez cuando el DOM está listo para manipulación, Drupal.los comportamientos se pueden ejecutar varias veces durante la ejecución de la página. Aún mejor, se pueden ejecutar cada vez que se insertan nuevos elementos DOM en el documento (es decir, AJAX contenido impulsado).

Drupal.los comportamientos también pueden anular o incluso extender un comportamiento. Así, por ejemplo, si un comportamiento de módulo añade un efecto de rebote en todos los enlaces, otro módulo podría reemplazar ese comportamiento con un efecto de rebote diferente.

Otra ventaja añadida de Drupal.comportamiento (a partir de Drupal 7), es el capacidad de usar drupal_add_js (PHP) o Drupal.configuración.modulename (JS) y pasar la configuración como un segundo parámetro (el primero es el contexto) al comportamiento.

 3
Author: th.sigit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-17 22:11:28

Los comportamientos de Drupal se usan si su JavaScript necesita ser ejecutado en la carga de la página y después de una solicitud AJAX (algunos elementos nuevos agregados en su documento/html).

Drupal.behaviors.yourmodulename = {
  attach: function (context, settings) {
     // Code to be run on page load, and
    // on ajax load added here
  }
};

Yourmodulename: Este es tu espacio de nombres y debe ser único. Por ejemplo, este es normalmente el nombre de tu módulo, pero no es obligatorio.

Contexto: Esto es realmente realmente genial, en la carga de la página el contexto contendrá todo el documento y después de una solicitud AJAX tendrá todos los recién cargados elemento. De esta manera, puede tratar el contenido que se carga a través de AJAX de manera diferente a otros.

Settings: Contiene información pasada a JavaScript a través de PHP, es similar a acceder a ella a través de Drupal.configuración.

 1
Author: khurrami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 12:43:20

Drupal tiene un sistema de 'comportamientos' para proporcionar una forma modular y mejor de adjuntar la funcionalidad JavaScript para colocar elementos en una página. Drupal Behaviors le permite anular o ampliar el comportamiento existente. Estos comportamientos de Drupal son programas activados por eventos que se adjuntan a los elementos de la página que se van a cambiar. Si bien los comportamientos se pueden adjuntar a contenidos específicos, también se adjuntan varios comportamientos y se pueden ablazar varias veces para un remake rápido.

JavaScript por conectando lógica a Drupal.comportamiento. He aquí un ejemplo tomado de esa página:

Drupal.behaviors.exampleModule = {
  attach: function (context, settings) {
    $('.example', context).click(function () {
      $(this).next('ul').toggle('show');
    });
  }
}

;

 1
Author: Pappu Kumar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-28 13:13:46