Je voudrais fournir une implémentation de modèle dans mon module et permettre aux thèmes de le remplacer. Fondamentalement, j'ajoute une suggestion par ce code simplifié:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(Je ne veux pas utiliser hook_theme pour ajouter un nouveau thème car je veux réutiliser les fonctions de nœud de prétraitement. Le nom du thème est maladroit mais je ne veux pas écrire node_ attach _% pour éviter toute confusion avec le type de nœud.)
Ensuite, j'utilise hook_theme_registry_alter () pour ajouter le chemin du module:
function attach_theme_registry_alter(&$theme_registry) {
$path = drupal_get_path('module', 'attach') . '/themes';
$theme_registry_copy = $theme_registry;
_theme_process_registry($theme_registry_copy, 'phptemplate', 'theme_engine', 'node', drupal_get_path('module', 'node'));
$theme_registry += array_diff_key($theme_registry_copy, $theme_registry);
if (!isset($theme_registry['node']['theme paths'])) {
$theme_registry['node']['theme paths'] = array();
}
if (!isset($theme_registry['node']['theme paths'])) {
$first_element = array_shift($theme_registry['node']['theme paths']);
if ($first_element) {
array_unshift($theme_registry['node']['theme paths'], $first_element, $path);
}
else {
array_unshift($theme_registry['node']['theme paths'], $path);
}
}
}
Mais ça ne marche pas. Cela signifie que le fichier themes / node - super.tpl.php n'est pas utilisé. Il n'est utilisé que si je l'ai copié dans le dossier du thème.
Réponses:
Fondamentalement, vous pouvez vous épargner un peu de maux de tête en implémentant
hook_theme()
au lieu de modifier le registre.Je suggère de jeter un œil à theming_example dans le projet Exemples , reproduit à la main sur cette page de documentation API , peut-être avec du code particulièrement utile sur cette page .
C'est tout pour Drupal 7.
la source
hook_theme
devrait vous donner le$existing
paramètre qui vous permet de modifier la chose, pas de la remplacer. Si ce n'est pas le cas, vous rencontrez peut-être un bug.Peut-être que celui-ci fonctionne:
L'important ici est la clé « crochet de base ».
la source
base hook
: drupal.org/node/2106635J'aime la solution de dashohoxha de l'implémentation hook_theme mais je n'ai pas pu la faire fonctionner. Après un peu de recherche sur Google, j'ai trouvé une variante qui fonctionnait bien pour moi:
Remarques: mon module personnalisé s'appelle 'mymodule' et mon type de contenu personnalisé s'appelle 'blog_post'. Le tpl.php que j'utilise s'appelle 'node - blog_post.tpl.php' et se trouve dans le sous-dossier 'templates' de mon module.
la source
Voici mon extrait pour déclarer les modèles de vues stockés dans le dossier "template" de mon "custom_module":
J'espère que cela aide quelqu'un.
la source
J'ai posé cette question une fois sur Stack Overflow . Fondamentalement, vous devez implémenter
hook_theme_registry_alter()
pour que votre chemin soit ajouté au chemin du modèle de hook de thème; puis, lehook_enable()
, vous appelez drupal_theme_rebuild () pour effacer le cache du registre de thème et obtenir votre chemin analysé pour les modèles.la source
hook_enable()
est invoqué lorsqu'un module est activé; si le module est déjà activé, il doit être désactivé, puis réactivé.