modèle de champ référence à un terme

Tags:

http://www.milesjcarter.co.uk/blog/web-design-development/drupal-views-t...
Using a custom field template to output taxonomy term references as their respective image fields, rather than as text or a link (2014/07)

Son cas :
Icones d'ingrédients sont des champs de taxonomie, affichés non en lien ou texte mais avec leurs champs image.
Une vue affiche une liste d'entités (avec divers champs) ou de nodes (ex: éléments sur un menu), où chaque entité a une ou plusieurs reférences vers des termes de taxonomie (ex: ingrédients principaux).

Il est facile d'afficher les termes référencés en texte (ou lien), mais montrer à la place une image, ou un autre champs contenu dans le terme référencé est plus complexe.

Utilise : modèle/template de champs perso du module Views.

Les relations dans Views

Le plus simple: ajouter une relation à la taxonomie, puis ajouter l'image avec la relation. Mais cela génère des doublons, car si un item dans la vue a plus d'une référence (à un terme) il est affiché pour chaque terme, et meme en ajoutant "distinst" et "pure distinct". Essayer views_distinct (l'article anglais date de juillet 2014)

Création du template de champs perso

Dans cette vue, aucune relation n'est utilisée, ajouter dans les champs à afficher le terme en question, ajouter le mode distinct..

Theming informationDans la section "Autres"/Informations, consulter les noms de templates proposés de la partie Field Content: Ingredients (rappel: ordre du plus au moins spécifique ; en gras: modèle utilisé ; lien en bleu pour récupérer le modèle du code par défaut).
Ici, on veux controller le champs dans toutes les situations, on choisit donc en haut de la liste views-view-field--field-ingredients.tpl.php

La ligne $row contient les données, en regardant mieux son contenu on peux trouver le chemin des objets voulus.
Ici, les données du champs qui référence le terme $row->field_field_ingredients et l'image à $row->field_field_ingredients[INDEX]['raw']['taxonomy_term']['field_image']

INDEX est le tableau index des items multiples.

field_view_field est utile pour afficher l'image sans avoir à se soucier des URL et permet de contrôler la mise en forme (ex: style d'image). Le isset () est pour empêcher les avertissements si une ligne n'a pas de référence à un terme.

if(isset($row->field_field_ingredients)) {
   $term = $row->field_field_ingredients;
   foreach($term as $ingredient){
      print render(field_view_field('taxonomy_term', $ingredient['raw']['taxonomy_term'], 'field_image',));
   }
}

Le code précédent affiche l'image en taille originale et avec une étiquette "Image:" moche. field_view_field a 4 paramètres optionnels pour l'affichage et le formatage. Transformer le contenu de la loop en:

print render(field_view_field('taxonomy_term', $ingredient['raw']['taxonomy_term'], 'field_image',
array('label'=>'hidden', 'settings' => array('image_style' => 'thumbnail'))));
 
A la fin:
if(isset($row->field_field_ingredients)) {
        $term = $row->field_field_ingredients;

        foreach($term as $ingredient){
                print render(field_view_field('taxonomy_term', $ingredient['raw']['taxonomy_term'], 'field_image',
                array('label'=>'hidden', 'settings' => array('image_style' => 'thumbnail'))));
        }
}
 

Mettre en mode distinct.

logo drush