Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Comment grouper entre des div plusieurs champs d'une vue?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

J'ai une Vue de type Page avec un Affichage par Champs.

Je voudrais mettre plusieurs des champs de chaque résultat entre des

<

div> pour les styler ensemble. Les autres champs peuvent être affichés normalement.

De plus, certains de ces champs disparaissent quand ils sont vides.

Comme vous y prendriez-vous pour regrouper ces champs entre des div?

Avec les templates de Vues?

A ce que j'y comprends, Vues ne permet de styler qu'un champs à la fois (sur le modèle views-view-field--nomduchamps.tpl.php).

Comment je dois m'y prendre pour récupérer plusieurs champs et les styler ensemble?

Version de Drupal : 

2 solutions :

  • Dans views, créer un champ custom text ou tu ajouteras ta div et les champs sélectionnés avant en ayant pris soin de cocher la case exclure de l'affichage pour ne pas les faire appararaître 2 fois

ou

-dans les templates de view, soit en sortie de ligne (row) soit pour chaque champ
voici un exemple pour le style de ligne ou j'affiche des div en fonction des champs appelés

<?php
// $Id: views-view-fields.tpl.php,v 1.6 2008/09/24 22:48:21 merlinofchaos Exp $
/**
 * @file views-view-fields.tpl.php
 * Default simple view template to all the fields as a row.
 *
 * - $view: The view in use.
 * - $fields: an array of $field objects. Each one contains:
 *   - $field->content: The output of the field.
 *   - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
 *   - $field->class: The safe class id to use.
 *   - $field->handler: The Views field handler object controlling this field. Do not use
 *     var_export to dump this object, as it can't handle the recursion.
 *   - $field->inline: Whether or not the field should be inline.
 *   - $field->inline_html: either div or span based on the above flag.
 *   - $field->separator: an optional separator that may appear before a field.
 * - $row: The raw result object from the query, with all data it fetched.
 *
 * @ingroup views_templates
 */
?>
<?php
 
foreach ($fields as $id => $field):
?>
<?php
 
if (!empty($field->separator)):
?>
<?php
 
print $field->separator;
?>
<?php
 
endif;
?>

<?php
 
if($field->class=="field-profil-logo-fid"){
    print
'<div class="bloc-logo">';
  }
 
?>

<?php
 
if($field->class=="title"){
    print
'<div class="bloc-adresse">';
  }
 
?>

<?php
 
if($field->class=="nothing-1"){
    print
'<div class="bloc-tel">';
  }
 
?>

<

<?php
 
print $field->inline_html;
?>

class="views-field-

<?php
 
print $field->class;
?>

">

<?php
 
if ($field->label):
?>
<?php
 
print $field->label;
?>

:

<?php
 
endif;
?>
<?php
     
// $field->element_type is either SPAN or DIV depending upon whether or not
      // the field is a 'block' element type or 'inline' element type.
     
?>

<

<?php
 
print $field->element_type;
?>

class="field-content">

<?php
 
print $field->content;
?>

</

<?php
 
print $field->element_type;
?>

>
</

<?php
 
print $field->inline_html;
?>

>

<?php
 
if($field->class=="field-profil-logo-fid" || $field->class=="nothing" || $field->class=="nothing-1"){
    print
'</div><!-- /bloc logo-->';
  }
 
?>
<?php
 
endforeach;
?>

Super, merci. Tu m'a mis sur la piste.

Or donc, voici ma recette avec Views.

Ce je veux plus précisément: une vue qui affiche une liste de teaser. Dans ces teaser des icônes signalent s'il y a du contenu vidéo, audio et des pièces jointes. Je veux que ces icônes se retrouvent dans une div avec la date de parution pour que tout tienne ensemble et soit facile à styler.

Pour ça, dans ma Vue avec Affichage par Champ, j'appelle mes champs CCK.

Par exemple, pour la vidéo, je paramètre le champ de la manière suivante.

[x] Exclure de l'affichage
[x] Rewrite the output of this field
      <span class="icone_video">Video</span>
[x] Hide if empty
[x] Grouper plusieurs valeurs Afficher [1] valeur(s) en commençant à [0]
[x] Aucune étiquette
Format: Générique

Même chose pour les autres.

Après,je paramètre le champ "Date de parution" qui se trouve à la suite des trois autres champs pour avoir accès à leur modèle de remplacement.

[x] Rewrite the output of this field
   <div class="metadata">
   <span>[created]</span>
   <span>[field_video_embed]</span>
   <span>[field_mp3_fid]</span>
   <span>[field_pieces__fid] </span>
</div>

Je me retrouve avec tous mes champs dans un DIV, tous mes champs sont transformés un mot précis (Audio, Vidéo, PDF).

Fantastique outil que Views, et sans un ligne de code.