- 1
[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
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
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
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
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
- 1