Bonjour,

Je sollicite votre aide car je cherche desesperement une solution pour ne pas afficher une class SPAN si ma variable est vide.

<span class="ma_class">
<?php if(empty( $variable ))
                {echo '';}
                else {echo esc_attr ( $variable['availability_date']);}
                ?>
</span>

Ce que je veux

Le code que j'aimerai : si ma variable est vide, mon span ne s'affiche pas et la variable non plus ...

Ce que j'obtiens

Avec mon code actuel : si ma variable est vide, mon span s'affiche et pas la variable ...

Merci pour votre aide ! :)

16 réponses


SLK
Réponse acceptée

Salut,

@Keulu,
ah ben non, lui il veut afficher la span seulement si la variable n'est pas vide, alors qu'avec ton code on l'affiche systématiquement.

c'est completement tordu cette histoire :
en fait, ça fais l'inverse ...

C'est parce qu'il y a juste une petite erreur d'innatention dans le dernier code de Carouge10, regarde ce qu'on a marqué :

SI la variable n'est pas vide ALORS
on affiche rien,
SINON (la variable est vide)
on affiche la variable

C'est évidemment l'inverse qu'on voulait.

Et dans ton dernier code,
tu as mis une classe_none quand la variable est vide (OK),
mais tu essaies quand même d'utiliser cette variable vide,
ce n'est pas bon.

Du coup plutôt comme ça alors :

<?php            
    // Si $variable n'est pas vide alors .....
    if( !empty($variable['availability_date']) ){
    ?>
    <span class="class_origine">
        <?=  esc_attr ($variable['availability_date']); ?>
   </span>
<?php
    // Sinon c'est qu'elle est vide alors....
   } else {
   ?>
   <span class="class_none">
       <!-- la seule différence c'est que j'ai supprimé la ligne qu'il y avait ici -->
   </span>

    <?php
   }
?> 

Et le code est vraiment "lourd",
en fait tu fais juste ça :

<?php            
    if (empty($variable['availability_date']))
        echo '<span class="class_none"></span>';
    else
        echo '<span class="class_origine">' . esc_attr($variable['availability_date']) . '</span>';
?> 

Et, tu as vraiment besoin d'afficher une span en "class_none" pour le design de ton site ?
Sinon, juste ça suffirait :

<?php            
    if (!empty($variable['availability_date']))
        echo '<span class="class_origine">' . esc_attr($variable['availability_date']) . '</span>';
?> 

Fais bien attention au ! devant le empty, dès fois il y est, dès fois non.

Bonsoir,
Il faut tout simplement de mettre ton span dans la condition

<?php 
if(!empty( $variable )){
    ?>
    <span class="ma_class">
        <?=  esc_attr ( $variable['availability_date']); ?>
    </span>
    <?php
}

J'ai du mal à suivre.
Pourquoi vouloir absolument faire un "esc_attr" si la variable n'est pas vide et l'afficher si elle l'est ?

edesign
Auteur

Merci pour ta réponse,

Mais je n'arrive pas à l'appliquer dans mon cas :

En fait, je veux dire :

Si $variable est vide
Ne rien afficher, ni span, ni variable,
Sinon
Afficher le span et la variable dedans.

J'ai essayé de bricoler grâce à ton code, mais je n'y arrive pas j'ai des erreurs :(

<?php                           
    if(!empty( $variable )){
    ?>
    <span class="maclass">
        <?=  esc_attr (''); 
    else {esc_attr ($variable['availability_date']);}
        ?>
   </span>
    <?php
}   
?>

Attention j'ai modifier ton code en y ajoutant un "!" qui à pour signication l'inverse de ce qu'on veux.
Donc dans ton cas là, tu as modifié de façon a avoir un affichage si la variable est vide et de plus, il manque des accolade au if.

Qu'est ce tu as comme erreurs en mettant mon code ?

Si je comprends bien, dans tous les cas, il te faut faire un "esc_attr()" ?

edesign
Auteur

Ou plutôt un truc dans le genre, mais là aussi j'ai une erreur :)

<?php                           
    if(!empty( $variable )){
    ?>
    <span class="maclass" style="display:none">
        <?=  esc_attr (''); 
        ?>
   </span>
<?php

   else{
   <span class="maclass">
        <?=  esc_attr ($variable['availability_date']); 
        ?>
   </span>

    <?php
}   
?> 
edesign
Auteur

Avec un echo simple ca fonctionne aussi, je viens de tester :

<?php echo ($variable['availability_date']);?>

Si je reprends ton code avec correction de syntaxe :

<?php            
    // Si $variable n'est pas vide alors .....
    if( !empty($variable) ){
    ?>
    <span class="maclass" style="display:none">
        <?=  esc_attr (''); ?>
   </span>
<?php
    // Sinon c'est qu'elle est vide alors....
   } else {
   ?>
   <span class="maclass">
        <?=  esc_attr ($variable['availability_date']); ?>
   </span>

    <?php
}   
?> 

Est-ce bien ce que tu veux ?

edesign
Auteur

Oui c'est bien cela, mais non toujours pas. Les span avec variable vide prennent en compte le style sans le display:none.
J'ai donc mon span avec variable qui fonctionne et les autres qui s'affichent sans variables à l'interieur :/
Comprend pas le code me semble juste

edesign
Auteur

J'ai essayé avec 2 class différente chargé en externe, c'est la même

et pourquoi pas :

<?php      
    <span class="maclass" <?php echo empty($variable) ? '' : 'style="display:none"'; ?>>
        <?php if (!empty($variable)) : ?>
            <?php echo esc_attr ($variable['availability_date']); ?>
        <?php endif ?>
   </span>
?>
edesign
Auteur

Alors ça marche, mais c'est completement tordu cette histoire :
en fait, ça fais l'inverse ... en inversant les 2 classes et en mettant !empty($variable['availability_date'] ça fonctionne, je comprend pas pourquoi mais c'est cool :)

<?php            
    // Si $variable n'est pas vide alors .....
    if( !empty($variable['availability_date']) ){
    ?>
    <span class="class_origine">
        <?=  esc_attr ($variable['availability_date']); ?>
   </span>
<?php
    // Sinon c'est qu'elle est vide alors....
   } else {
   ?>
   <span class="class_none">
        <?=  esc_attr ($variable['availability_date']); ?>
   </span>

    <?php
   }
?> 
edesign
Auteur

En tout cas, merci beaucoup pour ton aide !!! :)

edesign
Auteur

Bonjour SLK,

Effectivement je viens de tester le dernier code que tu as posté, et ça marche à merveille !! ^^

Merci beaucoup.

Bonjour.
Dans ce cas là, marques ton sujet comme résolu.