Submitted by Marie-Hélène on
Bonjour,
J'ai tripoté un fichier node-type.tpl.php pour mettre en forme des champs CCK mais je voudrais pouvoir n'afficher l'étiquette de l'un d'entre eux que s'il y a des valeurs à afficher. J'ai tâtonné dans tous les sens mais je ne comprends pas comment syntaxer la condition.
L'affichage des valeurs elles-mêmes est commandé par : [merci ConTemplate]
<?php foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php } ?>
Merci d'avance !
Pourquoi ne pas faire un
Permalien Soumis par Artusamak le 8 Décembre, 2009 - 23:50
Pourquoi ne pas faire un count($node->field_livre_citations) avant ton foreach pour savoir si le nombre d'éléments est supérieur à 0 ? :)
Pourquoi pas, mais je ne
Permalien Soumis par Marie-Hélène le 10 Décembre, 2009 - 19:57
Pourquoi pas, mais je ne sais pas comment exploiter le résultat (comment dire à Drupdrup : si le nombre d'éléments est supérieur à 0, faire ceci, sinon zapper) ; je sais faire un truc du genre
<?php
if(!empty($variable)) { echo $variable.'n\'est pas vide'; }
else { echo 'zapper'; }
?>
mais au-delà tu arrives aux limites de mes compétences en code (eh, suis pas dév, moi, je reconnais :-))... J'ai tâtonné dans mon .tpl.php mais à part quelque parse error je n'obtiens rien de plus que soit l'étiquette du champ apparaît dans tous les cas soit elle n'apparaît pas du tout (même quand elle devrait).
Désolée !
<?php foreach
Permalien Soumis par Artusamak le 10 Décembre, 2009 - 21:11
<?php foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php } ?>
Devient
<?php
// Utiliser count() qui permet de savoir combien d'éléments
// comporte le tableau que l'on passe en paramètre
// (dans notre cas $node->field_livre_citations)
if(count($node->field_livre_citations) > 0) :
foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php }
endif;?>
Et normalement ça devrait faire ce que tu veux :)
Tu n'as pas à t'excuser. ;)
Alors, je suis absolument
Permalien Soumis par Marie-Hélène le 11 Décembre, 2009 - 20:15
Alors, je suis absolument confuse, car je t'ai induit en erreur en ne recopiant que la partie de mon code qui gérait l'affichage des valeurs ; mon problème c'est l'affichage de l'étiquette : je voudrais conditionner cet affichage à la présence d'une valeur.
Si je reprends l'ensemble du code, j'ai :
<div class="citation">
<h3 class="field-label">Citations</h3>
<div class="field-items">
<?php foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php } ?>
</div>
</div>
J'ai essayé d'ajouter la condition de cette manière :
<?php if(count($node->field_livre_citations) > 0) : ?>
<div class="citation">
<h3 class="field-label">Citations</h3>
<div class="field-items">
<?php foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item"><?php print $item['view'] ?></div>
<?php }
endif;?>
</div></div>
ça ne marche pas.
J'ai tenté d'autres formules en déplaçant les morceaux les uns par rapport aux autres, mais rien de rien...
... si tu as encore quelques minutes ... :-)) ! merci beaucoup !
Bonjour C'est "citation"
Permalien Soumis par Lud le 13 Décembre, 2009 - 17:08
Bonjour
C'est "citation" dont tu veux conditionné l'affichage ?
Peux tu tester uniquement son affichage sans ta boucle foreach ?
<?php if(count($node->field_livre_citations) > 0) : ?>
<h3 class="field-label">Citations</h3>
<?php endif;?>
sinon quand tu dis ça ne marche pas, qu'entends tu par là ?
C'est "citation" dont tu
Permalien Soumis par Marie-Hélène le 13 Décembre, 2009 - 20:39
C'est "citation" dont tu veux conditionné l'affichage ?
C'est exactement ça : je ne veux voir le mot "citations" que lorsqu'il y a effectivement des citations.
Peux tu tester uniquement son affichage sans ta boucle foreach ?
Avec ton code, le mot s'affiche dans tous les cas (qu'il y ait des citations ou pas).
sinon quand tu dis ça ne marche pas, qu'entends tu par là ?
Oui, pardon pour le vague de la formule :-). Je veux dire par là que l'étiquette s'affiche dans tous les cas, sans considération de la condition.
Bon alors je ne suis pas du
Permalien Soumis par Lud le 14 Décembre, 2009 - 08:49
Bon alors je ne suis pas du tout développeur non plus, mais j'ai eu le même genre de chose que toi.
Je pense que par défaut à partir du moment où ton champ existe, il y a une ligne enregistrée dans ton tableau (car tu as bien ton champ dans ton interface de saisie et quand tu sauvegardes, tu sauvegardes une ligne sans rien dedans), simplement elle est vide si tu n'y as rien mis à l'intérieur. Du coup ton count est au minimum à 1.
Personnellement j'ai un champ url, et je teste si ce champ est vide ou non pour conditionner mon affichage.
Ce qui est curieux c'est
Permalien Soumis par Marie-Hélène le 14 Décembre, 2009 - 11:29
Ce qui est curieux c'est qu'en utilisant l'affichage des champs "normal", je veux dire sans le piloter par le tpl.php (dans le
<?php print $content ?>
), l'étiquette n'apparait pas si le champ est vide. Donc Drupal est parfaitement capable de faire cette distinction...Un exemple si tu veux : if
Permalien Soumis par sahuni le 14 Décembre, 2009 - 11:48
Un exemple si tu veux :
if ($node->field_xxx[0]['view'] != '')
{
print $node->content['field_xxx']['field']['#title'];
print $node->field_xxx[0]['view'];
}
Oui voila, c'est ainsi que
Permalien Soumis par Lud le 14 Décembre, 2009 - 11:53
Oui voila, c'est ainsi que je procède également
Si il y a d'autres manières plus élégantes de faire, ça m'intéresse.
Yes! c'est ça ! Je remets
Permalien Soumis par Marie-Hélène le 14 Décembre, 2009 - 20:28
Yes! c'est ça ! Je remets le code final "propre" pour les ceusses qui passeront derrière :
<?php if ($node->field_livre_citations[0]['view'] != '') { ?>
<h3><div class="titre-citations">
<?php print $node->content['field_livre_citations']['field']['#title']; } ?>
</div></h3>
<?php foreach ((array)$node->field_livre_citations as $item) { ?>
<div class="field-item">
<?php print $item['view'] ?>
</div>
<?php } ?>
(j'ai découpé le php en petits morceaux pour mettre du HTML au milieu).
Merci à vous trois !!
Quand je serai grande, je serai développeur web/Drupal. Juré.