Tableau dynamique

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,

J'ai créé un type de contenu avec des nodes references qui affiche des images les une en dessous des autres dans l'article.

Je souhaiterais savoir, s'il est possible de présenter (et comment) les images dans un tableau de 5 colonnes et autant de ligne que de référence définit par l'utilisateur ?

De même, je souhaiterais savoir s'il est possible d'afficher (et comment ?) ces nodes references dans un block en même temps que le node ?

Cordialement,

Martin

Version de Drupal : 

Enfin !!!!

J'ai enfin trouvé... Avec de l'aide bien sûr ! Donc j'hésite pas a partagé ma trouvaille parce que j'y suis depuis très longtemps sur cette affaire.

Pour situer le contexte :

J'ai un type de contenu campagne et un type de contenu partenaire.

Ce que je souhaite faire c'est permettre aux rédacteurs :
- de créer des partenaires avec le formulaire partenaire.
- de créer des campagnes avec le formulaire campagne.
- de choisir dans le formulaire campagne les partenaires avec un champs node reference en mutivalue.
Par défaut, sur ma page campagne apparait les partenaires les un en dessous des autres (des images de logo en fait).

Ce que j'aimerai faire, c'est les afficher dans un tableau dynamique, c'est à dire avec 5 colonnes (par) et autant de ligne de tableau nécessaire que de partenaire ajouter...

ex :
|logo1|logo2|logo3|logo4|logo5|
|logo6|logo7|logo8| | |

La solution :

Il faut d'abbord modifier le template de la vue.
Il y a plusieurs solutions, j'ai utilisé celle ci :
Administrer / type de contenu / template / corps du template du type de contenu qui doit afficher les images.

Puis il faut repérer où se trouve le nodereference concerné, le mien s'appelle :

<div class="field field-type-nodereference field-field-campagne-choix-partenaire">
  <h3 class="field-label">Choix du partenaire de la campagne</h3>
  <div class="field-items">
    <?php foreach ((array)$node->field_campagne_choix_partenaire as $item) { ?>
      <div class="field-item"><?php print $item['view'] ?></div>
    <?php } ?>
  </div>
</div>

et il faut le remplacer par :

<div class="field field-type-nodereference field-field-campagne-choix-partenaire">
     <h3 class="field-label">Choix du partenaire de la campagne</h3>
<div class="field-items">
     <table>
    
<?php
  $colonne
= 3 ; //nombres de colonnes
    
$i = 0 ; // Déclaration d'un itérateur
    
echo "<tr>";
     foreach ((array)
$node->field_campagne_choix_partenaire as $item)
     {
          if ((
$i % $colonne) == 0 && ($i > 0)){
        echo
"</tr><tr>" ;
       }
          echo
"<td>".$item['view']."</td>";
         
$i++ ;                    // on incrémente l'itérateur
    
}

       
if (($i % $colonne) > 0)
     {
          for (
$j =1; $j<= ($colonne - ($i % $colonne)); $j++)
          {
                 echo
"<td>&nbsp;</td>";
          }
     }       

     echo "</tr>";
?>

</table>
</div>
</div>

Il exite peut être un meilleur code ... mais ça marche très bien de cette façon...

En espérant que ça puisse servir à quelqu'un d'autre...

Cordialement,

Martin

Cordialement,

Ca marche, mais les tableaux pour ça, c'est inutile. Un floating left aurait sans doute suffit, avec le net avantage que ça s'adapte à ton écran. Et tu résoud le pb seulement dans la feuille de style, ce qui est quand même moins lourd que de stocker des templates en bdd.

Re,

Je suis intéresser par la manière que tu utiliserais pour faire cela avec du CSS.

En effet, je ne connais pas le nombre de node à inclure à l'avance puisque nodereference est en multivalue.

Je veux bien que tu nous exposes ta solution avec un peu plus de détail stp.

Cordialement,

Martn

Si tu veux rester à 5 colonnes, il va falloir inclure un élément de retour à la ligne dans le template tous les 5 items. Pas très difficile, une boucle qui compte, et un div "clear both" tous les 5 coups.
Si tu restes fluide (ce que je te conseille à priori, on ne connait pas à l'avance les écrans des utilisateurs), alors un floating left sur chaque div suffira.