Utworzyłem moduł funkcji zawierający tylko widok i typ zawartości.
W tej chwili moje page-node-x.tpl.php
i moje views-view-y.tpl.php
pliki znajdują się w moim katalogu motywów.
Czy można przenieść je do mojego modułu funkcji?
Moduł, który implementuje hook_preprocess_page()
lub hook_preprocess_node()
może sugerować nowe pliki szablonów poprzez zmianę zmiennej $variables['theme_hook_suggestions']
.
Kod zawarty w template_preprocess_page (), które inicjują tę zmienną, jest następujący.
// Populate the page template suggestions.
if ($suggestions = theme_get_suggestions(arg(), 'page')) {
$variables['theme_hook_suggestions'] = $suggestions;
}
Każda sugestia motywu musi być zgodna z wpisem zwróconym przez hook_theme () .
W widokach powinna istnieć równoważna funkcja przetwarzania wstępnego, której można używać w podobny sposób, lub sposób, hook_preprocess_page()
który pozwala tej funkcji zrozumieć, czy strona jest powiązana z widokiem.
Rozwiązanie polegające na dodaniu klucza do pliku szablonu hook_views_api()
nie działa jeszcze w Drupal 7. Działa to jednak jak urok:
/**
* Implements hook_theme().
*/
function bigtexas_theme() {
return array(
'views_view_fields__slideshow' => array(
'variables' => array('view' => NULL, 'options' => NULL, 'row' => NULL),
'template' => 'views-view-fields--slideshow',
'base hook' => 'views_view_fields',
'path' => drupal_get_path('module', 'bigtexas') . '/theme',
),
);
}
Rejestr motywów to miejsce, w którym Drupal przechowuje różnego rodzaju informacje o tym, jakich plików szablonów, funkcji motywów itp. Użyć. Bałagan z tym może prowadzić do WTF chwilę później, ponieważ rzeczy nie będą działać jak domyślne.
W każdym razie, podobnie jak wszystkie rzeczy drupal, istnieje pewien haczyk: hook_theme_registry_alter
możesz użyć, aby zmienić rejestr motywów i przenieść pliki szablonów do modułu. Nie radzę tego robić, ponieważ sprawi to, że utrzymanie strony będzie bardziej skomplikowane. Ale jeśli chcesz to zrobić, oto jak to zrobić.
W przypadku widoków teoretycznie istnieje mechanizm szablonów widoków (być może działa dla wszystkich szablonów).
Możesz ustawić kluczową „ścieżkę szablonu” w implementacji modułu niestandardowego hook_views_api.
Po uzyskaniu tych widoków przeskanuje podany katalog w poszukiwaniu plików szablonów. Niestety najprostszy obecnie nie działa, więc ta funkcja prawdopodobnie nie została jeszcze przeniesiona na drupal7, ale jeśli ktoś chce się do niej dostać, zobacz _views_find_module_templates () w views.module.
źródło
Najprostszym sposobem jest użycie
hook_theme_registry_alter()
i dodanie ścieżki modułu do ścieżek motywu:źródło
theme()
implementację, nie wydaje się, żetheme path
może być tablicą. Jesteś pewien, że to działa? Zobacz api.drupal.org/api/drupal/includes%21theme.inc/function/theme/7theme paths
kiedyś działał w Drupal 6, ale Drupal 7 zmienił to zachowanie w drupal.org/node/678714 Wydaje się, że z komentarzy # 29 i # 31 we wspomnianym numerze, należy zadeklarować sugestie tematyczne z modułów w module hook_theme tego modułu, ale jak to zrobić, pozostaje dla czytelnika ćwiczenie: /A może nieco abstrakcyjne podejście z tematem Reakcja kontekstowa?
http://drupal.org/project/context_reaction_theme
Zakończ swój kontekst w funkcjach, a nawet można go eksportować. Ale może to właściwie pytanie guru Drupala, które chce stworzyć coś głębszego i poznać trasę.
źródło
Zacząłem od odpowiedzi googletorp i zbudowałem ogólną funkcję:
Pozwala to nie tylko na zastąpienie pozycji i nazwy węzła oraz przeglądanie plików tpl, ale także zapewnia funkcję wstępnego przetwarzania dla widoków.
Więc jeśli masz własny moduł wywoływany
mymodule
z plikiem szablonu, np.sites/all/modules/mymodule/templates/foo--variant.tpl.php
Możesz teraz łatwo zmodyfikować rejestr motywów, aby używał własnego katalogu szablonów:źródło
Jak powiedział @jcsio, zaakceptowana odpowiedź na tej stronie działa, ale szablon nie może zostać zastąpiony przez motyw.
http://www.metachunk.com/blog/adding-module-path-drupal-7-theme-registry oferuje rozwiązanie, które pozwala dodać ścieżkę modułu (i podfolderów) do skanowania w poszukiwaniu wszystkich rodzajów plików .tpl.php.
Lekko go zmieniłem, ponieważ zawierał zmienną „ścieżki motywu”, która wydaje się nie używana przez Drupala 7.
Wypróbowałem zarówno zaakceptowaną odpowiedź, jak i to rozwiązanie, które do tej pory działa dla mnie!
źródło