web-dev-qa-db-fra.com

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

Depuis que le cas m'est revenu 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 de l'affichage principal (celui qui est généralement rendu en haut de la vue) est disponible dans affichage en tant que $title mais ne semble pas du tout disponible dans sortie de style. Au lieu de cela, le $title variable dans sortie de style signifie le nom d'un groupe si le regroupement est utilisé.

Ce que je veux, c'est d'avoir ce titre d'affichage ('nom humain') disponible dans le modèle tout comme $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?

8
Artur

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.php Serait template_preprocess_views_view_STYLE().

10
Елин Й.

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.

0
Vlasin

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.

0
rreiss

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 $view objet 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 devais juste le faire moi-même et cela fonctionnait très bien.

0
cdmo