Piszę niestandardowy moduł, który musi wstawiać niektóre pliki javascript i css tylko na stronie Widoki.
Korzystam ze strony hook_preprocess_page, ale nie wiem, czy bieżąca strona jest z widoku:
function mymodule_preprocess_page(&vars)
{
var_dump($vars); //output: nothings that reference the views!
if([view page])
{
drupal_add_js([...]);
drupal_add_css([...]);
// Rebuild scripts
$scripts = drupal_get_js();
$vars['scripts'] = $scripts;
// Same for css
}
}
Wiem, że mogę użyć pliku szablonu (page-my_view_page_path.tpl.php), ale js i dodatkowy css muszą być dołączone tylko wtedy, gdy mój moduł jest włączony; więc lubię to trzymać bezpośrednio w kodzie modułu .
Pomysły?
views
7
theming
javascript
Strae
źródło
źródło
Odpowiedzi:
views_get_page_view()
dowiaduje się, jakie jest aktualnie używane wyświetlanie strony. Jeśli zwraca NULL, bieżąca strona nie jest stroną wyświetleń.Ale użycie
drupal_add_js()
idrupal_add_css()
whook_preprocess_page()
nie będzie działać zgodnie z oczekiwaniami, ponieważ zmienna$script
i$style
zmienne zostały już ustawione przeztemplate_preprocess_page()
. Wstępne przetwarzanie szablonów widoków (patrz odpowiedź Jeremy French) jest prawdopodobnie lepszym miejscem na dodanie CSS i JavaScript.źródło
HOOK_preprocess_views_view(&$variables)
lub innego haka do wstępnego przetwarzania szablonu innego Widoku zamiastHOOK_preprocess_page(&$variables)
. W ten sposób można uzyskać widoki w$variables
i wykorzystaniadrupal_add_js()
idrupal_add_css()
bezpiecznie.Tutaj jest długi wątek na temat preprocesorów . Ten komentarz wydaje mi się bardzo prosty.
źródło
Jeśli korzystasz z hook_preprocess_page (), z definicji twój widok ma wyświetlanie strony i ścieżkę menu, które muszą być unikalne - abyś mógł to zrobić:
Jeśli masz argumenty przekazywane na tę stronę, więc potrzebujesz części
$_GET['q']
, zrób to zamiast tego za pomocąarg()
funkcji Drupala :http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/arg
źródło
Dla mnie to działa:
źródło
Jeśli dodajesz JS lub CSS do określonego wywołania zwrotnego, lepiej użyć
hook_page_build()
:źródło