Ich möchte eine Vorlagenimplementierung in meinem Modul bereitstellen und zulassen, dass Themen diese überschreiben. Grundsätzlich füge ich einen Vorschlag durch diesen vereinfachten Code hinzu:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(Ich will nicht hook_theme verwenden , um ein neues Thema hinzuzufügen , weil ich Vorprozess Knoten Funktionen wiederverwenden möge. Das Thema Namen sind umständlich , aber ich will nicht node_ schreiben befestigen _% zu vermeiden , um Verwechslungen mit Knotentyp.)
Dann benutze ich hook_theme_registry_alter (), um den Modulpfad hinzuzufügen:
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);
}
}
}
Es funktioniert jedoch nicht. Das heißt: Die Datei Themes / Node - super.tpl.php wird nicht verwendet. Es wird nur verwendet, wenn ich es in den Themenordner kopiert habe.
Antworten:
Grundsätzlich können Sie sich ein bisschen Kopfschmerzen ersparen,
hook_theme()
indem Sie die Registrierung implementieren, anstatt sie zu ändern.Ich schlage einen Blick auf theming_example im Beispielprojekt vor , das auf dieser API-Dokumentseite handlich reproduziert werden kann , möglicherweise mit besonders hilfreichem Code auf dieser Seite .
Dies ist alles für Drupal 7.
quelle
hook_theme
sollte die Implementierung Ihnen den$existing
Parameter geben, mit dem Sie das Objekt ändern und nicht überschreiben können. Wenn dies nicht der Fall ist, stoßen Sie möglicherweise auf einen Fehler.Vielleicht funktioniert dieser:
Wichtig ist hier der Schlüssel ' Basishaken '.
quelle
base hook
: drupal.org/node/2106635Ich mag dashohoxhas Lösung der hook_theme-Implementierung, konnte sie aber nicht zum Laufen bringen. Nach einigem googeln fand ich eine Variante, die für mich gut funktionierte :
Hinweise: Mein benutzerdefiniertes Modul heißt "mymodule" und mein benutzerdefinierter Inhaltstyp heißt "blog_post". Die von mir verwendete tpl.php heißt 'node - blog_post.tpl.php' und befindet sich im Unterordner 'templates' meines Moduls.
quelle
Hier ist mein Snippet zum Deklarieren von Ansichtsvorlagen, die im Ordner "template" meines "custom_module" gespeichert sind:
Hoffe es hilft jemandem.
quelle
Ich habe dies einmal bei Stack Overflow gefragt . Grundsätzlich müssen Sie implementieren
hook_theme_registry_alter()
, damit Ihr Pfad zum Pfad der Themen-Hook-Vorlage hinzugefügt wird. Anschließendhook_enable()
rufen Sie drupal_theme_rebuild () auf, um den Theme-Registrierungscache zu löschen und Ihren Pfad nach Vorlagen zu durchsuchen.quelle
hook_enable()
wird aufgerufen, wenn ein Modul aktiviert ist; Wenn das Modul bereits aktiviert ist, muss es deaktiviert und dann erneut aktiviert werden.