Anstatt dem Theme tpl-Dateien (in diesem Fall media-youtube-video.tpl.php) hinzuzufügen. Wie kann ich Feldvorlagen aus einem benutzerdefinierten Modul überschreiben? Einschließlich, wenn das Feld in einer Ansicht verwendet wird.
Ich bin mir sicher, dass es einen einfacheren Weg geben muss, aber das ist, was ich normalerweise mache:
1.
Registrieren Sie eine übergeordnete Theme-Implementierung in der Drupal-Theme-Registry. Fügen Sie also in mymod_theme()
ein neues Element hinzu. Der variables
Schlüssel muss mit dem des media_youtube_video
Themas übereinstimmen, d. H
/**
* 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. Fügen Sie einen Vorverarbeitungs-Hook für die ursprüngliche Theme-Implementierung hinzu und schlagen Sie hier Ihre neue Implementierung vor.
/*
* 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';
}
Vorschläge werden vom Themensystem auf LIFO- Weise ausgewertet . Mehr dazu können Sie hier lesen .
Angenommen, Sie wissen, dass ein anderes Modul denselben Ansatz verfolgt wie dieses, um die Implementierung zu überschreiben. Dann können Sie implementieren hook_module_implements_alter()
und erzwingen, dass Ihr hook_preprocess_THEME()
(so) zuletzt aufgerufen wird. Sie können lesen Sie hook_module_implements_alter()
hier .
Dies gilt auch für Views. Zusammenfassend müssen Sie nur den korrekten eindeutigen Namen der ursprünglichen Themenimplementierung herausfinden, die Sie überschreiben möchten (normalerweise im Quellmodul definiert), einen Vorverarbeitungs-Hook hinzufügen und dort Ihren überschreibenden Vorschlag hinzufügen.
Sie können auch ein neues Thema in diesem Modul dekalieren:
Fügen Sie dann eine / template-Verzeichnisdatei ein, die eine Feldvorlage wie diese (Standard) enthält, und nennen Sie sie field - field-nameofyourfield.tpl.php:
Nach dem Löschen des Caches verwendet Ihr Design diese abgelegte Vorlage, sofern sie nicht durch das Design selbst überschrieben wird. Das bedeutet, dass Sie diese Vorlage in Ihrem Design weiterhin überschreiben können.
quelle