2008-12-15 25 views
7

Me gustaría ejecutar el jQuery $ (document) .ready() en un sitio drupal. Si bien sé que puedo ponerlo en la página de índice, esto es realmente complicado y un truco.jQuery And Drupal page load

Lo que quiero saber es dónde está la ubicación correcta para poner esto, también debería ser específico del tema ya que no quiero que todos los temas lo usen.

Gracias de antemano por la ayuda.


éxito dulce, gracias a los dos por la ayuda, tengo una última enmienda a esta pregunta. Ahora que he llegado tan lejos, necesito ejecutar el código jQuery para actualizar el documento, ¿puedo usar el contexto para modificar el documento?

Respuesta

2

VonC respondió adecuadamente la pregunta "cómo" de la pregunta, por lo que me centraré en la parte "dónde".

Si el script es específico del tema, entonces el lugar natural para colocar el archivo de script está en su tema. El problema es que cuando Drupal llega al tema, la variable $scripts ya se ha "renderizado" (en el lenguaje de Drupal) en HTML. Para agregar una secuencia de comandos en la capa de tema, debe agregar la secuencia de comandos y reconstruir la variable $scripts.

Suponiendo que está usando Drupal 6, esto iría en su función theme_preprocess_page():

drupal_add_js(drupal_get_path('theme', 'theme_name') .'/example.js', 'theme'); 
$variables['scripts'] = drupal_get_js(); 

acaba de cambiar el segundo argumento de drupal_get_path() para reflejar el nombre de su tema, a continuación, cambiar el nombre del archivo de script desde example.js a lo que sea que hayas llamado tu script.

7

No es un especialista de Drupal, pero este blog entry sugiere que, a partir de Drupal 6, no es necesario que incluya la función $(document).ready() en nuestro código jQuery.

En su lugar, puede poner todo el código dentro de una función que asigne como una propiedad de Drupal.behaviors.

En el misc/ directory de la Drupal instalar, no sólo tenemos el archivo jquery.js pero también tenemos drupal.js (y archivos varios otros js, que controlan funciones específicas a determinadas páginas o funciones de administración de carga, por ejemplo. js), que rige el uso general de jQuery en Drupal.

Declara el objeto Drupal JavaScript con el fin de contener propiedades que necesitan ser accedidas y utilizadas por otros archivos js. Por ejemplo, la propiedad Drupal.settings se usa para pasar una matriz de configuraciones de módulos al código js para ese módulo. Esto se hace mediante una llamada telefónica drupal_add_js() en el código php y asegurándose de que el segundo parámetro se pasa como "ajuste", por ejemplo:

drupal_add_js(array('mymodule' => $array_of_settings), 'setting'); 

En el archivo js, ​​a continuación, se puede acceder estas configuraciones en Drupal.settings.mymodule. De este modo, ha extendido el objeto Drupal.settings con la propiedad mymodule, que es en sí misma un objeto que contiene todas sus configuraciones.

Otra propiedad del objeto Drupal es el objeto de comportamientos, es decir, Drupal.behaviors, y cuando queremos que nuestro módulo agregue nuevos comportamientos jQuery, simplemente ampliamos este objeto. Todo el código de jQuery para su módulo podría estar estructurado de esta manera:

Drupal.behaviors.myModuleBehavior = function (context) 
{ 
    //do some fancy stuff 
}; 

Pero, se preguntará, lo único que hace es declarar una función - ¿cómo se llama incluso conseguir? Bueno, que está todo cuidado en drupal.js. Tiene una función $(document).ready que llama a la función Drupal.attachBehaviors, que a su vez recorre el objeto Drupal.behaviors llamando a cada una de sus propiedades, todas estas funciones son declaradas por varios módulos como arriba, y pasando el documento como el contexto. El motivo para hacerlo de esta manera es que si su código jQuery realiza llamadas AJAX que dan como resultado la adición de nuevos elementos DOM a la página, es posible que desee adjuntar sus comportamientos (p. Ej., Ocultar todos los elementos h3 o lo que sea). ese nuevo contenido también. Pero como no existía cuando se cargó el DOM y se ejecutó Drupal.attachBehaviors, no tiene ningún comportamiento asociado.Sin embargo, con la configuración anterior, todo lo que necesita hacer es llamar al Drupal.behaviors.myModuleBehavior(newcontext), donde newcontext sería el nuevo contenido entregado por AJAX, asegurando así que los comportamientos no se vuelvan a adjuntar al documento completo. Consulte aquí para obtener el ejemplo completo de cómo usar este código

+0

En realidad, debe llamar a Drupal.attachBehaviors (newcontext) para permitir que todos los comportamientos registrados procesen el elemento newcontext (y sus elementos secundarios). –