Respuestas:
El código JavaScript utilizado por Drupal 7 es el siguiente:
Drupal.attachBehaviors = function (context, settings) {
context = context || document;
settings = settings || Drupal.settings;
// Execute all of them.
$.each(Drupal.behaviors, function () {
if ($.isFunction(this.attach)) {
this.attach(context, settings);
}
});
};
Drupal 6 usa un código similar:
Drupal.attachBehaviors = function(context) {
context = context || document;
if (Drupal.jsEnabled) {
// Execute all of them.
jQuery.each(Drupal.behaviors, function() {
this(context);
});
}
};
Si JavaScript garantiza que las propiedades del objeto / matriz siempre se atraviesen en el mismo orden en que se agregan, los valores se pasarían jQuery.each()
a la función utilizada como su segundo parámetro en el mismo orden en que se insertan en la matriz que se pasó como primer parámetro.
Esto significaría que el primer comportamiento insertado Drupal.behaviors
se ejecuta primero.
En este caso, para permitir que los comportamientos definidos por su módulo se ejecuten primero, puede usar un peso más ligero para él. Si desea que se ejecuten antes que los demás, el peso del módulo debe establecerse en -50; otros valores también pueden funcionar. Si está utilizando Drupal 7, drupal_add_js ()permite asociar un peso al código JavaScript; El código JavaScript con un peso más ligero aparece primero en la salida HTML. Esto no es posible con Drupal 6, pensó.
JavaScript no garantiza que las propiedades se atraviesen en el mismo orden en que se agregan. Esto significa que diferentes implementaciones de JavaScript presentarían las mismas propiedades usando un orden diferente; También significa que el mismo orden podría cambiar en diferentes versiones del mismo navegador.
select name, weight from system where type = 'module' order by weight ASC, name
Drupal.behaviors
; como informé $.each(Drupal.behaviors)
enumera los objetos en el mismo orden en que se insertan, sin basarse en su identificador.
Use el módulo Pesos de comportamiento .
(Por favor, pruébelo antes de usarlo en un sitio de producción)
El módulo permite adjuntar pesos a los comportamientos, y luego secuestra / reemplaza drupal.attachBehaviors
con una implementación personalizada, que respeta los pesos.
¿Por qué no el peso del módulo, como se sugiere en la otra respuesta?
Consulte
¿Es predecible el orden de los campos en un objeto javascript al recorrerlos? y
Orden de elementos: para (... en ...) bucle en javascript .
Para Drupal 6 -
Una solución simple, si esto no necesita ser portátil, es colocar el JS que desea ejecutar en último lugar en el archivo template.php del tema. Las llamadas temáticas drupal_add_js siempre se llaman después de los módulos.
Si necesita ser portátil, la solución "más limpia" en drupal 6 es agregar un nuevo módulo que tenga un peso diferente al de su módulo con el php. Incluso podría tener los dos módulos en la misma carpeta, hacer que el primer módulo dependa del primero y ajustar los pesos en los ganchos de instalación / actualización. Ninguno de los cuales es necesario, solo facilita la instalación.