[résolu] 2 foreach pour afficher des images et leurs titres?

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,

je viens de parcourir un peu le forum mais je n'ai pas trouvé de sujet assez proche du mien pour m'y greffer.

Voilà mon cas, j'utilise cck et imagefield pour un contenu, le champs imagefield se nome field_galerie et l'on peut y rajouter des images de manière illimitée.
Dans mon fichier node-galerie.tpl.php (pour l'instant j'utilise contemplate) j'utilise un foreach pour afficher des divs contenant mes images de cette maniere:

    <?php foreach ((array)$node->field_galerie as $item) { ?>
      <div class="piece-photo"><?php print $item['view'] ?></div>
    <?php } ?>

Or je voudrais attacher son titre à chacune de ces images, j'ai bien vu une variable $node->field_galerie[0]['data']['title'] dans contemplate qui me permet effectivement de recuperer le titre de l'image mais j'aimerais évidement incrementer ce [0] à chaque passage.

Quelqu'un aurait il travaillé sur un cas similaire?
Je pense à utiliser deux boucles foreach et peut etre les imbriquer l'une dans l'autre mais je ne sais pas trop comment m'y prendre, je suis graphiste print à la base... ;-)

Merci d'avance à quiconque me mettra sur une piste!

Forum : 
Version de Drupal : 

Salut Marvine, Salut Nyl, merci pour vos réponses.

En fait je n'avais même pas penser à utiliser une vue de type champs car j'avais d'autres champs dont le design était deja bien avancé dans mon node-galerie.tpl.php (donc imposant une vue de type node) mais si jamais je bute trop longtemps la dessus j'adopterai sans doute la méthode de Marvine quitte à tout reprendre.

En attendant je me donne quelques heures encore sur le sujet. J'ai bien compris que la double boucle foreach n'apporterait pas de solution mais je compte essayer demain de déclarer une variable perso et l'incrémenter à chaque lecture de la boucle pour utiliser sa valeur à la place du chiffre entre crochet désignant la ligne du tableau. Heu je sais pas si tout le monde me suit... mais est ce que ça pourrait marcher comme ca?

Nyl, quand je place ton bout de php j'obtiens le résultat suivant:

<pre>Array
(
    [0] => Array
        (
            [fid] => 48
            [list] => 1
            [data] => Array
                (
                    [title] => Splendeur d'une manche gigot.
                    [alt] =>
                )

            [uid] => 1
            [filename] => vestesport1.png
            [filepath] => sites/default/files/vestesport1.png
            [filemime] => image/png
            [filesize] => 129351
            [status] => 1
            [timestamp] => 1254500898
            [nid] => 12
            [view] => <a href="http://192.168.0.10/daviddiagne/sites/default/files/vestesport1.png" rel="lightbox[12][Splendeur d&#039;une manche gigot.]"><img src="http://192.168.0.10/daviddiagne/sites/default/files/imagecache/hauteur100px/vestesport1.png" alt="Splendeur d&#039;une manche gigot." title="Splendeur d&#039;une manche gigot."  width="49" height="100" /></a>
        )

    [1] => Array
        (
            [fid] => 45
            [list] => 1
            [data] => Array
                (
                    [title] => Pli creux au bas du dos pour donner le côté sportif à ce veston.
                    [alt] =>
                )

            [uid] => 1
            [filename] => vestesport3.png
            [filepath] => sites/default/files/vestesport3.png
            [filemime] => image/png
            [filesize] => 128433
            [status] => 1
            [timestamp] => 1254500842
            [nid] => 12
            [view] => <a href="http://192.168.0.10/daviddiagne/sites/default/files/vestesport3.png" rel="lightbox[12][Pli creux au bas du dos pour donner le côté sportif à ce veston.]"><img src="http://192.168.0.10/daviddiagne/sites/default/files/imagecache/hauteur100px/vestesport3.png" alt="Pli creux au bas du dos pour donner le côté sportif à ce veston." title="Pli creux au bas du dos pour donner le côté sportif à ce veston."  width="52" height="100" /></a>

        )

    [2] => Array
        (
            [fid] => 44
            [list] => 1
            [data] => Array
                (
                    [title] => Spirituel cran d'un veston sur mesure.
                    [alt] =>
                )

            [uid] => 1
            [filename] => vestesport2.png
            [filepath] => sites/default/files/vestesport2.png
            [filemime] => image/png
            [filesize] => 176649
            [status] => 1
            [timestamp] => 1254500826
            [nid] => 12
            [view] => <a href="http://192.168.0.10/daviddiagne/sites/default/files/vestesport2.png" rel="lightbox[12][Spirituel cran d&#039;un veston sur mesure.]"><img src="http://192.168.0.10/daviddiagne/sites/default/files/imagecache/hauteur100px/vestesport2.png" alt="Spirituel cran d&#039;un veston sur mesure." title="Spirituel cran d&#039;un veston sur mesure."  width="59" height="100" /></a>
        )

)
</pre>

C'est grave doc? :-)

En fait j'ai pas eu la patience d'attendre demain pour tester mon histoire d'incrémentation de variable. Ca marche comme je voulais, voila mon code commenté, dites moi juste si c'est "propre" ou s'il y'a plus drupalien...

<div class="piece-photos">
/* ici je declare ma variable /
        <?php $ligne = 0; ?>
/
debut du foreach /
        <?php foreach ((array)$node->field_galerie as $item) { ?>
/
affichage de l'image /
            <div class="piece-photo"><?php print $item['view'] ?></div>

/ affichage de la valeur titre incrementée a chaque fois /
            <div><?php print $node->field_galerie[$ligne]['data']['title'] ?></div>
/
incrémentation de ma variable /
            <?php $ligne++; ?>
/
fin du foreach */
        <?php } ?>
</div>

Hello
l'avantage d'utiliser foreach c'est que tu n'as pas besoin de te prendre la tête avec l'incrémentation : tu devrais pouvoir accéder à ton titre en faisant tout simplement un seul foreach (comme ce que tu montres au début de ce thread) puis :

<?php
 
print $item['data']['title'];
?>

Tout simplement génial!
J'imagine donc que ça doit être le même principe pour tous les tableaux... Je viens de faire un grand pas en avant.:-)
Merci Nyl, merci Marvine!

"J'imagine donc que ça doit être le même principe pour tous les tableaux.."
tout à fait, foreach est une arme fatale qui ouvre grand les portes du theming :-)
Tu peux a normalement tout faire dans un theme Drupal avec des if, else, et foreach.