2010-04-01 13 views
5

Próbuję wstawić odniesienie do pliku JavaScript w nagłówku za pomocą drupal_add_js(). Umieściłem tę linię wewnątrz funkcji wstępnego przetwarzania szablonów w template.php. Wynik, że kod nie działa w ogóle: nie ma odnośnika skryptu w wynikach, tak jak być powinien. Czy ktoś może mi powiedzieć, co robię źle?Dodawanie pliku JavaScript

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

..... 

Odpowiedz

-1

drupal_add_js() prace, ale stawiają go w głąb procesu renderowania strony. Proponuję umieścić go w template.php tak jak robisz, ale na początku, poza jakąkolwiek funkcją. Tak właśnie zrobiliśmy w przypadku kilku naszych projektów.

+0

Masz rację. Raz wyjmuję go z funkcji i umieszczam na zewnątrz w zasięgu globalnym, działa jak urok. :) Mam jednak inne pytanie. to tylko czysta wiedza. Dlaczego drupal dodaje te pliki dwa razy z dwóch różnych lokalizacji na wyjściu? Jakiś pomysł? Oto jak to wygląda - – Andrew

+0

Zgodnie z sugestią użytkownika - scott, przestałem używać tych plików w moim folderze motywów i zamiast tego użyłem domyślnych ustawień drupala. Tak więc nie ma nazwy ścieżki w funkcji drupal_add_js, innymi słowy, po prostu nazwa pliku - drupal_add_js ('jquery.js') – Andrew

+0

, te dwa pliki powinny automatycznie zostać dodane do tematu przez drupal. cała kolekcja plików js jest dodawana do strony przez na stronie.tpl.php –

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

Co oznacza, że ​​funkcja drupal_add_js nie dodaje tagu skryptu? Ponieważ to było moje zrozumienie drupalnej pomocy. To powiedziawszy, zrobiłem to, co sugerowałeś i, co się stało, dodano te pliki (drupal.js, jquery.js) dwa razy. : confuse: Oto jak to wyglądało - Andrew

+0

Czy dodano ten kod na stronie phptemplate_preprocess_page? – Nikit

+2

drupa.js i jquery.js są już dodane przez rdzeń Drupala. Dodanie ich do tematu tworzy duplikaty. Możliwe jest usunięcie domyślnych ustawień, ale nie jest to dobry pomysł. Jeśli używasz różnych wersji, najprawdopodobniej złamiesz coś w Drupalu, który opiera się na wersjach dostarczanych z rdzeniem (co jest dobre, jeśli wiesz, co łamiesz i jest w porządku z tym, ale wydaje się, że nie wiesz). A jeśli używasz tych samych wersji, jaki jest powód ich przenoszenia? –

10

Jeszcze łatwiej, Javascript, który musi być załadowany na wszystkich stronach można dodać w pliku .info tematu. Zobacz http://drupal.org/node/171205#scripts.

+1

+1 interesujące ... plik informacji o motywach jest wymagany przez drupala 7, opublikowany link mówi również, że drupal 6 domyślnie ładuje wszystkie pliki .js z folderu kompozycji. drupal_add_js można wywołać z modułów, a nawet z węzłów, jeśli masz włączony format wejściowy php ... –

+1

Nie, to nie jest całkowicie poprawne. Plik .info dla kompozycji jest wymagany zarówno w Drupal 6, jak i Drupal 7. D6 automatycznie ładuje tylko plik o nazwie "script.js". D7 nie ładuje automatycznie plików js. Tak jak mówisz, drupal_add_js() można wywołać z węzła, ale nie jest to zalecane, ponieważ mieszamy zawartość z prezentacją. – marcvangend

1

Jeśli umieścić plik JavaScript w katalogu tematycznego, można po prostu dodać następujące tematy .info pliku

scripts[] = myJavaScriptFile.js 

Po dodaniu tego pliku trzeba wyłączyć swój temat i wtedy to reaktywny.

1

Jak wskazano przez inne, po prostu użycie drupal_add_js() z implementacji nie działa. Odwołania do plików JavaScript zebranych za pomocą wielu wywołań do drupal_add_js() są używane do generowania odpowiedniego znacznika w zmiennych z template_preprocess_page(). Ale implementacja motywu hook_preprocess_page() jest zawsze wywoływana po template_preprocess_page(). Tak więc w celu uzyskania pliki dodane przez drupal_add_js() w pliku (ów) .tpl.php, trzeba nadpisać już ustawione $scripts zmienne:

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

Ale nie powinno się dodawać jquery.js i drupal.js siebie, to powinno już być wykonywane automatycznie przez rdzeń Drupala. Jeśli musisz zrobić to sam, to coś jest uszkodzone w Twojej witrynie. Możesz (ponownie) dodać pliki jako szybką naprawę, ale lepiej znajdź podstawową przyczynę problemu, ponieważ najprawdopodobniej tworzysz inne problemy, których jeszcze nie zidentyfikowałeś (lub pracowałeś, nie zdając sobie z tego sprawy).

+0

+1, a także możesz dodać pliki JS we własnej implementacji 'hook_init()' lub 'hook_preprocess()' lub 'hook_preprocess_page()' własnego modułu, lub podobnych haków. – Sk8erPeter

Powiązane problemy