Twig -> Utiliser une variable comme nom partiel d'une autre

Twig -> Utiliser une variable comme nom partiel d'une autre - PHP - Programmation

Marsh Posté le 09-09-2019 à 08:58:30    

Bonjour,
 
J'utilise Twig qui dans un template me génère des cards (Bootstrap) d'après les données d'un tableau (tab).
 
J'ai un autre tableau (stats) contenant des données, ayant comme clés ce qui est contenu dans "tab.name".
 
Je souhaiterais donc faire quelque chose du genre:
 

Code :
  1. {% for data in tab %}
  2.     {% for elem in stats.tab.name %}
  3.         /// Mon code
  4.     {% endfor %}
  5. {% endfor %}


 
Comme vous vous en doutez ça ne fonctionne pas, et je ne vois pas comment faire malgré mes recherches...
Par avance, merci!

Reply

Marsh Posté le 09-09-2019 à 08:58:30   

Reply

Marsh Posté le 09-09-2019 à 13:02:10    

Je comprends que elem a la même valeur que tab.nme en fait, c'est ça ? T aligne 2 ne peut fonctionner car ce qui vient après "in" est un tableau. Or, tu donnes une valeur.
Pas sûr du coup que tu aies besoin de 2 boucles. La première devrait suffire. La syntaxe stats[data] ou stats[data.name] ou stats.data.name, ça marche ? Je ne connais pas Twig mais je comprends que data est un élément dépilé de tab.


Message édité par rufo le 09-09-2019 à 13:02:20

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-09-2019 à 15:02:55    

tab.name est bien juste une variable "string", qui peut avoir comme valeur par exemple "intitule".
 
Par contre, "stats" est lui un tableau, et si je fais ma boucle avec: {% for elem in stats.intitule %}, ça fonctionne bien.
 
elem n'a donc pas la même valeur que tab.name, mais il a la valeur correspondant à la clé du tableau "stats[tab.name]" en quelque sorte.
En PHP je ferais $stats[$tab['name']].
 
Je ne sais pas si je suis très clair… ;)

Reply

Marsh Posté le 09-09-2019 à 15:28:09    

Reply

Marsh Posté le 09-09-2019 à 15:31:09    

c'est un truc comme ça que tu veux ?  
 

Code :
  1. {% set tab = ['foo', 'bar', 'baz'] %}
  2.     {% set stats = {'foo': { 'name': ['foobar', 'foobaz']},
  3.         'bar': { 'name': ['barbar', 'barbaz']},
  4.         'baz': { 'name': ['bazfoo', 'bazbar']}} %}
  5.     {% for data in tab %}
  6.         {% for elem in stats[data]['name'] %}
  7.             {{ elem }}
  8.         {% endfor %}
  9.     {% endfor %}


Message édité par xtieu le 09-09-2019 à 15:31:55

---------------
There's more to life than the boy in that mirror.
Reply

Marsh Posté le 09-09-2019 à 16:31:05    

Au passage, j'ai jamais trop compris l'intérêt de passer par ce genre d'outil (Twig, Smarty...) pour faire une appli qui respect le MVC :??: Pourquoi passer par un pseudo-langage qui fait généralement moins de choses que le langage sur lequel il s'appuie (ici, PHP) ? Bien souvent, on se fait chier à trouver une syntaxe pour faire un truc dans ce pseudo-langage qu'on ferait facilement avec PHP :/
 
On peut trè bien faire une apli MVC en PHP où d'un côté, tu mets tes fichiers PHP qui se chargent de faire l'accès aux données, d'un autre, les fichiers PHP qui génèrent les vues et de l'autre, les fichiers PHP qui gèrent les contrôleurs qui s'appuient eux-mêmes sur les fichiers d'accès aux données et sur les vues.
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-10-2019 à 18:10:03    

Tout d'abord merci pour votre aide à tous. :)
 
Pour te répondre rufo je suis passé à Twig un peu par curiosité au départ et j'ai trouvé ça très pratique rapidement.
Alors oui on a moins de possibilités mais ce n'est pas non plus le but d'un Template de faire du traitement donc une fois pris le coup je ne suis plus embêté par ça, hormis quelques fois comme ici où il s'agit plutôt d'une prise en main de l'outil qu'autre chose.
 
Sur Twig on retrouve quelques trucs assez pratiques comme des boucles "for-else", qui si le for ne trouve aucun élément (que le tableau soit vide où qu'il ne s'agisse même pas d'un tableau) on passe sur le else par exemple.
Autre exemple, pour afficher une variable: {{ma_variable}}. Inutile de vérifier si la variable existe. Si ce n'est pas le cas ça n'affiche rien, on n'a pas d'erreur.
Quelques petits trucs qu'on peut tout à faire faire en PHP mais qui ici sont simplifiés.
 
Perso je trouve ça pratique quoi. :)

Reply

Marsh Posté le 06-10-2019 à 20:33:40    

rufo a écrit :

Au passage, j'ai jamais trop compris l'intérêt de passer par ce genre d'outil (Twig, Smarty...) pour faire une appli qui respect le MVC :??: Pourquoi passer par un pseudo-langage qui fait généralement moins de choses que le langage sur lequel il s'appuie (ici, PHP) ? Bien souvent, on se fait chier à trouver une syntaxe pour faire un truc dans ce pseudo-langage qu'on ferait facilement avec PHP :/
 
On peut trè bien faire une apli MVC en PHP où d'un côté, tu mets tes fichiers PHP qui se chargent de faire l'accès aux données, d'un autre, les fichiers PHP qui génèrent les vues et de l'autre, les fichiers PHP qui gèrent les contrôleurs qui s'appuient eux-mêmes sur les fichiers d'accès aux données et sur les vues.
 


bien sur que tu peux, mais un moteur de template te force a suivre cette convention, en plus d'avoir des affichage qui sont forcement echappés comme il faut et du gain en perf


---------------

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed