Ein Modul, das neue Vorlagendateien implementiert hook_preprocess_page()
oder hook_preprocess_node()
vorschlagen kann, indem die Variable geändert wird $variables['theme_hook_suggestions']
.
Der in template_preprocess_page () enthaltene Code , der diese Variable initialisiert, lautet wie folgt.
// Populate the page template suggestions.
if ($suggestions = theme_get_suggestions(arg(), 'page')) {
$variables['theme_hook_suggestions'] = $suggestions;
}
Jeder Themenvorschlag muss mit einem Eintrag übereinstimmen, der von hook_theme () zurückgegeben wird .
In Ansichten sollte es eine äquivalente Vorverarbeitungsfunktion geben, die auf ähnliche Weise verwendet werden kann, oder eine Möglichkeit, die hook_preprocess_page()
es der Funktion ermöglicht, zu verstehen, ob die Seite einer Ansicht zugeordnet ist.
Für Ansichten gibt es theoretisch einen Mechanismus für Ansichtsvorlagen (möglicherweise funktioniert er für alle Vorlagen).
Sie können den Schlüssel "Vorlagenpfad" in Ihrer hook_views_api-Implementierung Ihres benutzerdefinierten Moduls festlegen.
Sobald Sie diese Ansichten haben, durchsucht es Ihr angegebenes Verzeichnis nach Vorlagendateien. Leider schlägt der einfachste Test derzeit fehl, sodass diese Funktion wahrscheinlich noch nicht auf drupal7 portiert ist. Wenn jedoch jemand darauf zugreifen möchte, lesen Sie _views_find_module_templates () in views.module.
quelle
Am einfachsten ist es
hook_theme_registry_alter()
, den Pfad Ihres Moduls zu den Themenpfaden zu verwenden und hinzuzufügen:quelle
theme()
Implementierung scheint es nicht so, als könnte estheme path
sich um ein Array handeln. Bist du sicher, dass das funktioniert? Siehe api.drupal.org/api/drupal/includes%21theme.inc/function/theme/7theme paths
Früher in Drupal 6 gearbeitet, aber Drupal 7 hat dieses Verhalten in drupal.org/node/678714 geändert. Aus den Kommentaren Nr. 29 und Nr. 31 in der genannten Ausgabe geht hervor, dass Themenvorschläge von Modulen deklariert werden müssen im hook_theme dieses Moduls, aber wie das geht, bleibt dem Leser als Übung überlassen: /Wie wäre es mit einem leicht abstrahierten Ansatz mit Context Reaction Theme?
http://drupal.org/project/context_reaction_theme
Schließen Sie Ihren Kontext in Features ab und er kann sogar exportiert werden. Aber vielleicht ist dies tatsächlich eine Drupal-Guru-Frage, die etwas Tieferes erschaffen und den Weg kennen möchte.
quelle
Ich begann mit der Antwort von googletorp und baute eine generische Funktion auf:
Es ermöglicht nicht nur das Überschreiben der Position und des Namens von Knoten- und Ansichts-TPL-Dateien, sondern auch das Bereitstellen einer Vorverarbeitungsfunktion für Ansichten.
Wenn Sie also ein eigenes Modul
mymodule
mit einer Vorlagendatei aufgerufen habensites/all/modules/mymodule/templates/foo--variant.tpl.php
, können Sie jetzt einfach die Themenregistrierung so ändern, dass Ihr eigenes Vorlagenverzeichnis verwendet wird:quelle
Wie @jcsio sagte, funktioniert die akzeptierte Antwort auf dieser Seite, aber die Vorlage kann nicht durch ein Thema überschrieben werden.
http://www.metachunk.com/blog/adding-module-path-drupal-7-theme-registry bietet eine Lösung, mit der Sie den Pfad Ihres Moduls (und Ihrer Unterordner) hinzufügen können, um nach allen Arten gescannt zu werden von .tpl.php-Dateien.
Ich habe es leicht geändert, da es eine Variable 'Themenpfade' enthielt, die von Drupal 7 nicht verwendet zu werden scheint.
Ich habe sowohl die akzeptierte Antwort als auch diese Lösung ausprobiert, letztere funktioniert bisher für mich!
quelle