Zamiast dodawać pliki tpl (w tym przypadku media-youtube-video.tpl.php) do motywu. Jak mogę zastąpić szablony pól z niestandardowego modułu? W tym, gdy pole jest używane w widoku.
Jestem pewien, że musi istnieć łatwiejszy sposób na zrobienie tego, ale zazwyczaj tak robię:
1.
Zarejestruj nadrzędną implementację motywu w rejestrze motywów Drupal. Więc mymod_theme()
dodaj nowy element. variables
Klucz musi być zgodny z media_youtube_video
IE tematu
/**
* Implements hook_theme().
*/
function mymod_theme() {
return array(
'my_media_youtube_video' => array(
'variables' => array('uri' => NULL, ...), // see media_youtube_theme() for this
// bundle the template file with the module itself
// i.e. theme/my-media-youtube-video.tpl.php
'template' => 'my-media-youtube-video',
'path' => drupal_get_path('module', 'mymod') . '/theme
)
);
}
2. Dodaj zaczep wstępnego przetwarzania oryginalnej implementacji motywu i zasugeruj tutaj nową implementację.
/*
* Implements hook_preprocess_media_youtube_video().
*
* Or more generally, hook_preprocess_THEME().
*/
function mymod_preprocess_media_youtube_video(&$variables) {
// If your overriding implementation is not a template but
// is implemented in a different file,
// then remember to include the file explicitly at this point..
$variables['theme_hook_suggestions'][] = 'my_media_youtube_video';
}
Sugestie są oceniane przez system motywów w sposób LIFO . Możesz przeczytać więcej na ten temat tutaj .
Załóżmy, że zdajesz sobie sprawę, że inny moduł również stosuje to samo podejście, co ten, aby zastąpić implementację, a następnie możesz zaimplementować hook_module_implements_alter()
i wymusić hook_preprocess_THEME()
(patrz wyżej) wywołanie na końcu. Możesz przeczytać o hook_module_implements_alter()
tutaj .
Dotyczy to również widoków. Podsumowując, musisz tylko znaleźć poprawną unikalną nazwę oryginalnej implementacji kompozycji, którą chcesz zastąpić (zazwyczaj zdefiniowaną w module źródłowym), dodać haczyk wstępnego przetwarzania i dodać tam swoją nadrzędną sugestię.
W ten sposób możesz również zadeklarować nowy motyw w module:
Następnie umieść plik katalogu / template, który zawiera szablon pola taki jak ten (standardowy) i nazwij go field - nazwa-pola-twojego-pola.tpl.php:
Po wyczyszczeniu pamięci podręcznej Twój motyw będzie używał tego szablonu, chyba że nie zostanie zastąpiony przez sam motyw, co oznacza, że nadal możesz zastąpić ten szablon w swoim motywie.
źródło