Submitted by martin87 on
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
Enfin !!!! J'ai enfin
Permalien Soumis par martin87 le 18 Juin, 2008 - 18:52
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">
$i % $colonne) > 0)
<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 ((
{
for ($j =1; $j<= ($colonne - ($i % $colonne)); $j++)
{
echo "<td> </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
Permalien Soumis par graou le 20 Juin, 2008 - 18:06
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
Permalien Soumis par martin87 le 20 Juin, 2008 - 18:33
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
Permalien Soumis par graou le 24 Juin, 2008 - 10:36
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.