Comment utiliser template_preprocess_views_view pour passer une variable à un fichier tpl de vues

8

Depuis que l'affaire m'est revenue pour la deuxième fois récemment, j'ai décidé de poser la question pour peut-être apprendre quelque chose.

Dans les vues, le titre d'affichage principal (celui qui est généralement rendu en haut de la vue) est disponible en sortie d'affichage car $titleil ne semble pas du tout être disponible en sortie de style . Au lieu de cela, la $titlevariable dans la sortie de style signifie le nom d'un groupe si le regroupement est utilisé.

Ce que je veux, c'est que ce titre d'affichage («nom humain») soit disponible dans n'importe quel modèle $display_title. J'ai donc mis ce code dans mon 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);
}

... en espérant avoir le titre humain à portée de main: <?php print $display_title; ?>

... mais pas de joie. Qu'est-ce que je fais mal?

Artur
la source

Réponses:

10

Comme vous le savez également, une vue comporte plusieurs modèles, qui peuvent varier en fonction du style, par exemple:

  • Sortie d'affichage: views-view.tpl.php
  • Sortie de style: views-view-STYLE.tpl.php
  • Sortie de style de ligne: views-view-fields.tpl.php
  • Contenu du champ: views-view-field.tpl.php

etc.

Chacun de ces modèles possède sa propre fonction de prétraitement. Ce que vous faites dans votre code n'affecte que la sortie d'affichage puisque vous prétraitez uniquement les vues-view.tpl.php ( template_preprocess_views_view)

Pour savoir quels fichiers de modèle sont disponibles pour votre vue spécifique, vous pouvez aller voir la page d'édition et sous la section «Avancé» à la fin de la colonne, cliquez sur «Thème: Informations». Vous verrez quels fichiers de modèle votre vue utilise (en gras) et les fichiers de modèle que vous utiliseriez pour les remplacer.

Les fonctions de prétraitement doivent être nommées d'après le fichier modèle, en remplaçant les tirets par des traits de soulignement. Par exemple pour views-view-STYLE.tpl.phpserait template_preprocess_views_view_STYLE().

Елин Й.
la source
0

Vous pouvez utiliser les fonctions:

  1. drupal_set_title ()

    Définit le titre de la page actuelle.

  2. drupal_get_title ()

    Obtient le titre de la page actuelle.

Vlasin
la source
Merci, mais ma vue génère un bloc plutôt qu'une page, donc ce n'est pas une solution. De plus, cela nécessiterait de passer un argument de chaîne, comme t('My Views Title')puis le traduire à nouveau du côté administrateur. C'est ce que je veux éviter (pourtant j'ai déjà traduit cette vue ...).
Artur
0

Si je me souviens bien, vous pouvez passer le titre avec l'objet de vue, ajoutez une nouvelle variable à l'intérieur de l'objet de vue et ust dans le fichier de modèle.

rreiss
la source
0

Pour répondre à la question spécifique de "passer une variable à un fichier modèle" ... je pense qu'il suffit d'utiliser un crochet différent. Attachez la variable à votre $viewobjet comme ceci:

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

Puis dans un fichier modèle comme views-view--NAME_OF_VIEW--page.tpl.php:

print $view->display_title;

Je n'avais qu'à le faire moi-même et cela a très bien fonctionné.

cdmo
la source