[résolu] Ne pas afficher l'étiquette d'un champ, s'il est vide

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 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 !

Forum : 
Version de Drupal : 

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 ((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 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" 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 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 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 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 ($node->field_xxx[0]['view'] != '')
      {
      print $node->content['field_xxx']['field']['#title'];
        print $node->field_xxx[0]['view'];
        }

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é.