Annonce

  •  » Trucs et astuces
  •  » [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

#1 2009-09-26 18:47:23

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

[Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

Bonjour à tous.

Dans la série "j'aime bien Smarty mais c'est Smarty qui ne m'aime pas", je suis en train de devenir chèvre ! Dans un fichier tpl, je cherche à afficher un bout de html en fonction de l'état d'une variable. Un peu dans ce style :

Code:

{if $mavariable == true}
   <mon code HTML>
{else}
   < un autre code HTML>
{/if}

$mavariable est initialisée à true ou false dans le fichier php qui appelle le tpl. Mais çà ne marche pas et je n'ai pas de messages d'erreur à me mettre sous la dent pour débugguer.

Quelqu'un aurait-il une idée ?

P.S : J'ai volontairement généralisé le code en exemple pour que l'astuce puisse servir à d'autres. Mais si nécessaire, je peux, bien entendu, produire ici le code original complet.

Hors ligne

#2 2009-09-26 19:02:21

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

J'ai eu le pb récemment avec akBookStyle.
Et je constate que nous n'avons utilisé aucun booléen.

class="{if empty($AK_NEXT)}hide {/if}...

{if !empty($thumbnails)}
{if $AK_THUMBNAILS_LOC == 'top' or $AK_THUMBNAILS_LOC == 'bottom'}
<table class="ak_display_horizontal">
{else}
<table class="ak_display">
{/if}

J'ai fait une recherche vite fait dans tout notre code et je n'ai pas trouvé de booléen.

;-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#3 2009-09-26 19:06:11

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

Eric a écrit:

Code:

{if $mavariable == true}
   <mon code HTML>
{else}
   < un autre code HTML>
{/if}

Néanmoins, j'essaierai

{if $mavariable === true}
ou
{if $mavariable}


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#4 2009-09-27 09:57:39

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1969

Re: [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

VDigital a écrit:

Néanmoins, j'essaierai

{if $mavariable === true}
ou
{if $mavariable}

Je confirme : dans un .tpl , j'ai le code suivant qui fonctionne :

Code:

{if !$ec_ap_ok}style = "display:none;"{/if}

Ca réagit comme prévu.

Hors ligne

#5 2009-09-27 17:41:40

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

Bon, ben çà ne fonctionne pas chez moi... Je dois faire quelque chose de travers. Voici le code du tpl en question :

Code:

    <table class="table2" width="97%" summary="">
        <thead>
          <tr class="throw">
            <td>&nbsp;</td>
            <td>{'Username'|@translate}</td>
            <td>{'user_status'|@translate}</td>
            <td>{'Email address'|@translate}</td>
            <td>{'Groups'|@translate}</td>
            <td>{'Registration'|@translate}</td>
          </tr>
        </thead>

      {foreach from=$users item=user name=users_loop}
          <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}">
          <td><input type="checkbox" name="selection[]" value="{$user.ID}" {$user.CHECKED} id="selection-{$user.ID}" /></td>
          <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td>
          <td>{$user.STATUS}</td>
          <td>{$user.EMAIL}</td>
          <td>{$user.GROUPS}</td>
          <td {if $expiration}style="color:red;text-align:center;"{else}style="color=green;text-align:center;"{/if}>{$user.REGISTRATION}</td>
          {foreach from=$user.plugin_columns item=data}
          <td>{$data}</td>
          {/foreach}          
        </tr>
      {/foreach}
    </table>

Dans le fichier appelant le tpl, j'ai ajouté manuellement ma variable tel que

Code:

$expiration = true;

L'affichage de {$user.REGISTRATION} reste avec la couleur de texte appliquée par défaut pour le thème Goto même si je passe $expiration = false.

Je vais regarder comment ceci est utilisé dans akBookStyle.

Hors ligne

#6 2009-09-27 18:00:47

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

C'est bon, j'ai trouvé !

En fait, il faut tout simplement déclarer la nouvelle variable dans l'initialisation du template comme ceci :

Code:

      
$expiration = True;
              
       $template->append(
         'users',
         array(
           'ID' => $local_user['id'],
           'CHECKED' => $checked,
           'U_PROFILE' => $profile_url.$local_user['id'],
           'U_PERM' => $perm_url.$local_user['id'],
           'USERNAME' => $local_user['username']
            .($local_user['id'] == $conf['guest_id']
            ? '<BR />['.l10n('is_the_guest').']' : '')
             .($local_user['id'] == $conf['default_user_id']
             ? '<BR />['.l10n('is_the_default').']' : ''),
          'STATUS' => l10n('user_status_'.
            $local_user['status']).(($local_user['adviser'] == 'true')
             ? '<BR />['.l10n('adviser').']' : ''),
          'EMAIL' => get_email_address_as_display_text($local_user['email']),
           'GROUPS' => $groups_string,
           'REGISTRATION' => $local_user['registration_date'],
           'EXPIRATION' => $expiration,
        )
      );

Puis d'y faire appel dans le tpl sur le même principe que les autres variables affichées (sauf que celle-ci, on ne l'affiche pas mais sert juste de condition) :

Code:

    <table class="table2" width="97%" summary="">
        <thead>
          <tr class="throw">
            <td>&nbsp;</td>
            <td>{'Username'|@translate}</td>
            <td>{'user_status'|@translate}</td>
            <td>{'Email address'|@translate}</td>
            <td>{'Groups'|@translate}</td>
            <td>{'Registration'|@translate}</td>
          </tr>
        </thead>

      {foreach from=$users item=user name=users_loop}
          <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}">
          <td><input type="checkbox" name="selection[]" value="{$user.ID}" {$user.CHECKED} id="selection-{$user.ID}" /></td>
          <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td>
          <td>{$user.STATUS}</td>
          <td>{$user.EMAIL}</td>
          <td>{$user.GROUPS}</td>
          <td {if $user.EXPIRATION == True}style="color:red;text-align:center;"{else}style="color:lime;text-align:center;"{/if}>{$user.REGISTRATION}</td>
          {foreach from=$user.plugin_columns item=data}
          <td>{$data}</td>
          {/foreach}          
        </tr>
      {/foreach}
    </table>

Hors ligne

  •  » Trucs et astuces
  •  » [Résolu] [Smarty] Affichage conditionnel en fonction de l'état d'une variable

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact