Em vez de adicionar arquivos tpl (neste caso, media-youtube-video.tpl.php) ao tema. Como substituir modelos de campo de um módulo personalizado? Incluindo quando o campo é usado em uma Visualização.
Tenho certeza de que deve haver uma maneira mais fácil de fazer isso, mas é o que normalmente faço:
1.
Registre uma implementação de tema substituto no registro do tema Drupal. Então, mymod_theme()
adicione um novo item. A variables
chave deve corresponder à do media_youtube_video
tema, ou seja,
/**
* 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. Adicione um gancho de pré-processo para a implementação do tema original e sugira sua nova implementação aqui.
/*
* 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';
}
As sugestões são avaliadas pelo sistema temático de uma maneira LIFO . Você pode ler mais sobre isso aqui .
Suponha que você esteja ciente de que outro módulo também está seguindo a mesma abordagem que esta para substituir a implementação. Em seguida, você pode implementar hook_module_implements_alter()
e forçar sua hook_preprocess_THEME()
(veja acima) a ser chamada por último. Você pode ler hook_module_implements_alter()
aqui .
Isso vale para o Views também. Em resumo, você só precisa descobrir o nome exclusivo correto da implementação do tema original que deseja substituir (normalmente definido no módulo de origem), adicionar um gancho de pré-processo e adicionar sua sugestão de substituição lá.
Você também pode declarar novo tema no módulo desta maneira:
Em seguida, coloque um arquivo de diretório / template que contenha um modelo de campo como este (padrão) e nomeie-o como field - field-nameofyourfield.tpl.php:
Após limpar o cache, seu tema usará esse modelo arquivado, a menos que não seja substituído pelo próprio tema, o que significa que você ainda poderá substituir esse modelo no seu tema.
fonte