Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Template: Tester si une variable existe avant de l'afficher

Posted by Nesswaw on 11/07/2024 17:01

Bonjour,

C'est quoi la façon/méthode la plus "propre" dans un template, pour tester si une variable existe avant de l'afficher, histoire d'éviter une erreur de type Undefined array key "telephonenumber", par exemple

je pourrais faire un test dans ma boucle foreach

 
{if isset($ldap_entries[$i]['telephonenumber'][0])}
    <td>{$ldap_entries[$i]['telephonenumber'][0]}</td>
{/if}

Mais cela est plutôt lourd à écrire...

Existe-il une solution plus rapide?

Merci d'avance

  [Opened] Template: Tester si une variable existe avant de l'afficher

Reply #1 Posted by laurentj on 04/14/2025 12:38

Bonjour,

Non, il n'y a pas plus rapide vu qu'ici cela conditionne l'affichage d'autres élements (le <td>) que simplement la valeur.

Cela aurait été :


    <td>{if isset($ldap_entries[$i]['telephonenumber'][0])}
           {$ldap_entries[$i]['telephonenumber'][0]}
        {/if}</td>

On pourrait essayer d'imaginer un élément syntaxique à intégrer dans le moteur de template. Peut être un truc du genre {~$variable}, qui résulterait en un isset avant affichage au final.

<td>{~$ldap_entries[$i]['telephonenumber'][0]}</td>

Je vais essayer d'intégrer ça dans une prochaine version :)

  [Opened] Template: Tester si une variable existe avant de l'afficher

Reply #2 Posted by Nesswaw on 04/15/2025 12:13

Bonjour,

Merci pour la réponse.

Effectivement j'ai fait faux dans mon code, c'est bien que la valeur que j'aimerais afficher dans le TD, comme tu l'as mentionné.

Dans ce cas ici, les valeurs proviennent d'une query, et si valeur vide, la var $ldap_entries[$i]['telephonenumber'][0] n'existe pas

dans le template j'ai simplement mis un:

<td>{$ldap_entries[$i]['telephonenumber'][0]}</td>

mais quand le champ est vide, la var existe pas et Jelix retourne une erreur du style:

Undefined array key "telephonenumber" et Trying to access array offset on value of type null

C'est pour éviter ces deux erreurs que je dois faire un IF isset

Je crois que Blade et Twig le font sous cette forme:

{{ user.phone[0] ?? '-' }}
{{ $user['phone'][0] ?? '-' }}

On pourrait imaginer un modificateur tpl du genre:

{isset $ldap_entries[$i]['telephonenumber'][0]} => Si rien affiche vide
{isset $ldap_entries[$i]['telephonenumber'][0],  'Téléphone non renseigné'} => Si rien affiche 'Téléphone non renseigné'

  [Opened] Template: Tester si une variable existe avant de l'afficher

Reply #3 Posted by Nesswaw on 04/15/2025 14:25

Ou encore plus simple, si on reprend l'exemple e Twig et Blade:

{$ldap_entries[$i]['telephonenumber'][0] ??} => Si existe affiche la valeur, sinon rien
{$ldap_entries[$i]['telephonenumber'][0] ?? '-' } => Si existe pas, affiche un tiret

PS: Je peux pas éditer un message du forum :(

  [Opened] Template: Tester si une variable existe avant de l'afficher

Reply #4 Posted by Nesswaw on 04/15/2025 16:28

https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

J'ai testé dans Jelix:

<td>
    {$ldap_entries[$i]['telephonenumber'][0] ?? 'nobody'}
</td>

Il me retourne l'erreur:

Dans le tag $ldap_entries[$i]['telephonenumber'][0] 'nobody' du template\modules\app\templates/ldaptest.tpl, le code php n'est pas autorisé

Peut-être simplement autorisé l'opérateur ?? dans jTpl?

Sources: https://twig.symfony.com/doc/3.x/templates.html#other-operators => Cherchez ?? https://laravel-news.com/blade-templates-null-coalesce-operator

 
Page
  1. Template: Tester si une variable existe avant de l'afficher >
  2. Template: Tester si une variable existe avant de l'afficher >
  3. Template: Tester si une variable existe avant de l'afficher >
  4. Template: Tester si une variable existe avant de l'afficher