En lugar de agregar archivos tpl (en este caso, media-youtube-video.tpl.php) al tema. ¿Cómo puedo anular plantillas de campo de un módulo personalizado? Incluso cuando el campo se usa en una Vista.
Estoy seguro de que debe haber una manera más fácil de hacer esto, pero esto es lo que normalmente hago:
1.
Registre una implementación de tema primordial con el registro de temas de Drupal. Entonces, en mymod_theme()
, agregue un nuevo elemento. La variables
clave debe coincidir con la del media_youtube_video
tema, es decir
/**
* 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. Agregue un enlace de preproceso para la implementación del tema original y sugiera su nueva implementación aquí.
/*
* 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';
}
El sistema de temas evalúa las sugerencias de forma LIFO . Puedes leer más sobre esto aquí .
Suponga que sabe que otro módulo también está siguiendo el mismo enfoque que este para anular la implementación, luego puede implementar hook_module_implements_alter()
y forzar su hook_preprocess_THEME()
(ver arriba) para que se llame al último. Puedes leer sobre hook_module_implements_alter()
aquí .
Esto también es válido para Vistas. En resumen, solo necesita encontrar el nombre único correcto de la implementación del tema original que desea anular (generalmente definido en el módulo fuente), agregar un enlace de preproceso y agregar allí su sugerencia principal.
También puede decalar un nuevo tema en el módulo de esta manera:
Luego, coloque un archivo de directorio / template que contenga una plantilla de campo como esta (estándar) y asígnele el nombre field - field-nameofyourfield.tpl.php:
Después de borrar el caché, su tema usará esta plantilla archivada a menos que no sea anulada por el tema en sí, lo que significa que aún puede anular esta plantilla en su tema.
fuente