2010-04-01 18 views
5

Estoy tratando de insertar una referencia al archivo Javascript en el encabezado usando drupal_add_js(). Coloqué esta línea dentro de la función de preproceso de la plantilla en template.php. El resultado es que el código no funciona en absoluto: no hay un enlace de script en el resultado como debería ser. ¿Alguien puede decirme qué estoy haciendo mal?Agregar un archivo JavaScript

function phptemplate_preprocess_page(&$vars) { 
    $url = drupal_get_path("theme","mysite"); 
    drupal_add_js($url."/jquery.js"); 
    drupal_add_js($url."/drupal.js"); 

..... 

Respuesta

-1

drupal_add_js() obras, sino que están poniendo profundamente en el proceso de renderización de páginas. Sugiero que lo pongas en template.php como lo estás haciendo, pero al principio, fuera de cualquier función. Esto es lo que hicimos en algunos de nuestros proyectos.

+0

Tienes razón. Una vez que lo saco de la función y lo coloco afuera en el alcance global, funciona como un encanto. :) Tengo otra pregunta sin embargo. es puramente conocimiento sake. ¿Por qué Drupal agrega esos archivos dos veces desde dos ubicaciones diferentes en la salida? ¿Alguna idea? Así es como se ve: – Andrew

+0

Según lo sugerido por el usuario - scott, dejé de usar esos archivos en mi carpeta de temas y usé los valores predeterminados de drupal en su lugar. Por lo tanto, no hay ninguna mención de ruta en la función drupal_add_js, en otras palabras, solo nombre de archivo - drupal_add_js ('jquery.js') – Andrew

+0

ydesde, esos 2 archivos deberían agregarse automáticamente al tema por drupal. toda la colección de archivos js se agrega a la página mediante en page.tpl.php –

2
drupal_add_js(path_to_theme().'/js/jquery.cycle.all.js'); 
    $vars['scripts'] = drupal_get_js(); 
+0

Entonces, ¿significa que la función drupal_add_js no agrega la etiqueta de secuencia de comandos? Porque esa era mi comprensión de la ayuda de Drupal. Dicho esto, hice lo que sugirió y, lo que sucedió fue que, agregó esos archivos (drupal.js, jquery.js) dos veces. : confuse: Así es como se veía - Andrew

+0

¿Agregaste este código en phptemplate_preprocess_page? – Nikit

+2

drupa.js y jquery.js ya están agregados por Drupal core. Por lo tanto, agregarlos a tu tema es crear duplicados. Es posible eliminar los valores predeterminados, pero no es una buena idea. Si está usando versiones diferentes, es probable que rompa algo en Drupal que dependa de las versiones que vienen con núcleo (lo cual está bien si sabe lo que está rompiendo y está de acuerdo con eso, pero parece que no sabe) Y si usa las mismas versiones, ¿cuál es el motivo para moverlas? –

10

Aún más fácil, el Javascript que debe cargarse en todas las páginas se puede agregar en el archivo .info del tema. Ver http://drupal.org/node/171205#scripts.

+1

+1 interesante ... el archivo de información del tema es un requisito de drupal 7, el enlace que publicó también dice que drupal 6 carga todos los archivos .js de la carpeta del tema de manera predeterminada. el drupal_add_js se puede llamar desde módulos e incluso desde nodos si tiene habilitado el formato de entrada php ... –

+1

No, eso no es del todo correcto. El archivo .info para un tema es obligatorio tanto en Drupal 6 como en Drupal 7. D6 solo carga automáticamente el archivo llamado 'script.js'. D7 no carga automáticamente archivos js. Como dices, se puede llamar a drupal_add_js() desde un nodo, pero eso no se recomienda porque estás mezclando contenido con presentación. – marcvangend

1

Si coloca el archivo JavaScript en el directorio de temas, basta con añadir lo siguiente a los temas .info archivo

scripts[] = myJavaScriptFile.js 

Después de agregar este archivo es necesario desactivar su tema y luego se reactiva.

1

Como se señaló por otros, simplemente el uso de drupal_add_js() desde una implementación hook_preprocess_page() no funciona. Las referencias a los archivos de JavaScript recopilados a través de las llamadas múltiples a drupal_add_js() se utilizan para generar el marcado correspondiente en las variables $scripts de template_preprocess_page(). Pero la implementación de un tema de hook_preprocess_page() siempre se llama después de template_preprocess_page(). Así que con el fin de tener los archivos añadidos a través drupal_add_js() en su archivo (s) .tpl.php, es necesario reemplazar el conjunto ya $scripts variables:

function THEME_preprocess_page(&$variables) 
    drupal_add_js(...); 
    $variables['scripts'] = drupal_get_js(); 
} 

Pero, usted no debería tener que añadir jquery.js y drupal.js usted mismo, ya debería ser hecho automáticamente por el núcleo de Drupal. Si necesita hacerlo usted mismo, entonces algo se rompe en su sitio. Puede (re) agregar los archivos como una solución rápida, pero es mejor que encuentre la causa raíz del problema, ya que es muy probable que cree otros problemas que aún no identificó (o que no funcionó sin darse cuenta).

+0

+1, y también puede agregar archivos JS en la implementación 'hook_init()' o 'hook_preprocess()' o 'hook_preprocess_page()' de su propio módulo (o ganchos similares). – Sk8erPeter

Cuestiones relacionadas