Cómo usar template_preprocess_views_view para pasar una variable a un archivo tpl de vistas

8

Como el caso volvió a ocurrir por segunda vez recientemente, decidí hacer la pregunta para quizás aprender algo.

En Vistas, el título de la pantalla principal (el que generalmente se representa en la parte superior de la vista) está disponible en la salida de la pantalla , $titlepero no parece estar disponible en la salida del estilo . En cambio, la $titlevariable en la salida de estilo significa el nombre de un grupo si se usa la agrupación.

Lo que quiero es tener ese título de visualización ('nombre humano') disponible en cualquier plantilla como $display_title. Entonces, lo que hice fue poner este código en mi template.php:

function MYTHEME_preprocess_views_view(&$variables){
  if($variables['name'] == 'studios' && $variables['display_id'] == 'block'){
    $view = $variables['view'];
    $variables['display_title'] = $view->human_name;
  }
  dpm($variables);
}

... esperando tener a mano el título humano: <?php print $display_title; ?>

... pero no hay alegría. ¿Qué estoy haciendo mal?

Artur
fuente

Respuestas:

10

Como también sabrás, una vista tiene varias plantillas, que pueden variar según el estilo, por ejemplo:

  • Salida de pantalla: views-view.tpl.php
  • Salida de estilo: views-view-STYLE.tpl.php
  • Salida de estilo de fila: views-view-fields.tpl.php
  • Contenido del campo: views-view-field.tpl.php

etc.

Cada una de esas plantillas tiene su propia función de preproceso. Lo que haces en tu código solo afecta la salida de la pantalla ya que solo estás preprocesando views-view.tpl.php ( template_preprocess_views_view)

Para averiguar qué archivos de plantilla están disponibles para su vista específica, puede ir a ver la página de edición y en la sección 'Avanzado' al final de la columna, haga clic en 'Tema: Información'. Verá qué archivos de plantilla usa su vista (en negrita) y qué archivos de plantilla usaría para anularlos.

Las funciones de preproceso deben nombrarse después del archivo de plantilla, reemplazando los guiones con guiones bajos. Por ejemplo para views-view-STYLE.tpl.phpsería template_preprocess_views_view_STYLE().

Елин Й.
fuente
0

Podrías usar las funciones:

  1. drupal_set_title ()

    Establece el título de la página actual.

  2. drupal_get_title ()

    Obtiene el título de la página actual.

Vlasin
fuente
Gracias, pero mi vista genera un bloque en lugar de una página, por lo que esta no es una solución. Además, eso requeriría pasar un argumento de cadena, como t('My Views Title')y luego traducirlo nuevamente en el lado del administrador. Que es lo que quiero evitar (sin embargo, ya he traducido esa Vista ...).
Artur
0

Si recuerdo bien, puede pasar el título con el objeto de vista, agregar una nueva variable dentro del objeto de vista y usarlo en el archivo de plantilla.

rreiss
fuente
0

Para abordar la cuestión específica de "pasar una variable a un archivo de plantilla" ... Creo que solo tiene que usar un gancho diferente. Adjunte la variable a su $viewobjeto de esta manera:

function NAME_OF_MODULE_views_pre_render(&$view) {
  $view->display_title = "What have you";
}

Luego, en un archivo de plantilla como views-view--NAME_OF_VIEW--page.tpl.php:

print $view->display_title;

Solo tuve que hacer esto yo mismo y funcionó muy bien.

cdmo
fuente