drupal 7 – Anular plantilla de campo con módulo personalizado

Pregunta:

En lugar de agregar archivos tpl (en este caso, media-youtube-video.tpl.php) al tema. ¿Cómo puedo anular las plantillas de campo de un módulo personalizado? Incluso cuando el campo se usa en una vista.

Respuesta:

Estoy seguro de que debe haber una forma más fácil de hacer esto, pero esto es lo que hago normalmente:

1. Registre una implementación de tema primordial con el registro de temas de Drupal. Entonces, en mymod_theme() , agregue un nuevo elemento. La clave de las variables debe coincidir con la del tema media_youtube_video , 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';
}

Las sugerencias son evaluadas por el sistema de temas de una manera 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 que su hook_preprocess_THEME() (ver arriba) sea llamado en último lugar. Puede leer sobre hook_module_implements_alter() aquí .

Esto también es válido para Views. En resumen, solo necesita averiguar el nombre único correcto de la implementación del tema original que desea anular (normalmente definida en el módulo fuente), agregar un enlace de preproceso y agregar allí su sugerencia principal.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım