Au lieu d'ajouter des fichiers tpl (dans ce cas, media-youtube-video.tpl.php) au thème. Comment remplacer les modèles de champs d'un module personnalisé? Y compris lorsque le champ est utilisé dans une vue.
Je suis sûr qu'il doit y avoir un moyen plus facile de le faire, mais c'est ce que je fais généralement:
1.
Enregistrez une implémentation de thème prioritaire dans le registre de thèmes Drupal. Donc, dans mymod_theme()
, ajoutez un nouvel élément. La variables
clé doit correspondre à celle du media_youtube_video
thème, c'est-à-dire
/**
* 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. Ajoutez un crochet de prétraitement pour l'implémentation du thème d'origine et suggérez votre nouvelle implémentation ici.
/*
* 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';
}
Les suggestions sont évaluées par le système thématique de façon LIFO . Vous pouvez en savoir plus à ce sujet ici .
Supposons que vous soyez conscient qu'un autre module suit également la même approche que celui-ci pour remplacer l'implémentation, alors vous pouvez implémenter hook_module_implements_alter()
et forcer votre hook_preprocess_THEME()
(voir ci-dessus) à être appelé en dernier. Vous pouvez lire hook_module_implements_alter()
ici .
Cela vaut également pour les vues. En résumé, il vous suffit de trouver le nom unique correct de l'implémentation de thème d'origine que vous souhaitez remplacer (généralement défini dans le module source), d'ajouter un crochet de prétraitement et d'y ajouter votre suggestion de remplacement.
Vous pouvez également décaler le nouveau thème dans le module de cette façon:
Ensuite, placez dans un fichier de répertoire / template qui contient un modèle de champ comme celui-ci (standard) et nommez-le field - field-nameofyourfield.tpl.php:
Après avoir effacé le cache, votre thème utilisera ce modèle déposé sauf s'il n'est pas remplacé par le thème lui-même, ce qui signifie que vous pouvez toujours remplacer ce modèle dans votre thème.
la source