[PHP][SMARTY] Construire un nom de variable à la volé avec eval et cat

Construire un nom de variable à la volé avec eval et cat [PHP][SMARTY] - PHP - Programmation

Marsh Posté le 24-09-2008 à 09:15:03    

Bonjour a tous ,
 
Je vous soumets un petit problème que je rencontre avec smarty. Pour résumer la fonctionnalité de la page, elle est composée d'une zone répétée qui affiche des informations sur x article, mais il y a également de la saisie (pour chaque article zone de saisie texte, radio bouton...) . Ces articles sont repéré par un id, a l'affichage c'est cet id qui me permet de construire le nom de mon champ pour le récupérer dans mon post :
 

Code :
  1. <textarea name="commentaire_{$id_article}" rows="4" cols="30" >{ assign var='texte' value = '$erreur.avis_'|cat:$id_article}{eval var=$texte}</textarea>


 
lorsque l'utilisateur valide les données, coté serveur je vérifie que les saisies sont correcte si c'est ok j'enregistre en base sinon je raffiche la même page avec les données précédemment saisies et c'est cette partie qui me pose problème. je construis le nom de la variable qui contient mon texte et après j'utilise le résultat dans la fonction eval pour afficher le texte proprement dit mais ça ne marche pas :
 

Code :
  1. { assign var='texte' value = '$erreur.avis_'|cat:$id_article}

->  j'arrive bien a assigner  ''$erreur.avis_1" à ma variable smarty $texte pour l'id valant 1
 
toutes les données sont sotckées dans le tableau associatif de la manière suivante :  erreur['avis_1'] = "mon texte que je  veux afficher" ou erreur['radio_1']= 'A'   (dans ce cas ci j'ai des données pour l'article avec id=1 : un radio  et une zone texte)
 

Code :
  1. {eval var=$texte}


par contre ici je n'arrive pas a éxectuer le code contenu dans la variable $texte, en fait dans ma zone texte, ca m'affiche : ''$erreur.avis_1" j'ai l'impression que la fonction eval est tout simplement ignorée.  
 
N'étant pas expert smarty, j ne sais pas si je fais une faute dans mon raisonnement ou si ce n'est tout simplement pas possible a réaliser... pourtant l'exemple ici en fin de page : http://smarty.net/manual/fr/language.function.eval.php , me laisse penser que si  
 
Si vous avez un avis sur la question, je suis preneur.

Message cité 1 fois
Message édité par bilbot le 24-09-2008 à 10:36:21
Reply

Marsh Posté le 24-09-2008 à 09:15:03   

Reply

Marsh Posté le 24-09-2008 à 10:15:59    

bilbot a écrit :

Si vous avez un avis sur la question, je suis preneur.


 
J'ai lu en diagonale, mais mon avis est que tu dois pouvoir remplacer ces horreurs par des tableaux.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-09-2008 à 10:27:40    

oui toutes les infos sont stockées dans des tableaux, d'ailleurs la syntaxe smarty le montre bien


Message édité par bilbot le 24-09-2008 à 10:28:30
Reply

Marsh Posté le 24-09-2008 à 10:34:28    

Tu ne vas pas assez loin dans ce sens. Construire le nom des champs de manière dynamique comme tu le fais est un mauvais choix.
Arrange-toi pour pouvoir écrire quelque chose de ce genre :
 

Code :
  1. <textarea name="commentaire[{$id_article}]" rows="4" cols="30" >{$erreur.avis.$id_article}</textarea>


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-09-2008 à 10:46:48    

effectivement c'est une solution plus simple et qui marche.
 
Merci de ton aide. Par conte eval ne fonctionne pas pour des chaines de caractères construite dans le template, c'est bien dommage.

Reply

Marsh Posté le 24-09-2008 à 11:23:52    

bilbot a écrit :

effectivement c'est une solution plus simple et qui marche.
 
Merci de ton aide. Par conte eval ne fonctionne pas pour des chaines de caractères construite dans le template, c'est bien dommage.


eval ne devrait jamais être utilisé. Il ne m'est arrivé qu'une fois de ne pas pouvoir le remplacer par autre chose de plus propre.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-09-2008 à 11:39:10    

ok mais pourquoi ils ont foutu cette fonction si ca ne devrait jamais etre utilisé ?
 
Sinon trainoo tu l'as developpé avec smarty ? t'as utilisé un framework ?

Reply

Marsh Posté le 24-09-2008 à 11:45:29    

bilbot a écrit :

ok mais pourquoi ils ont foutu cette fonction si ca ne devrait jamais etre utilisé ?

 

php est plein de conneries qu'il vaut mieux éviter d'utiliser si on veut garder du code propre et une certaine santé mentale.

 
bilbot a écrit :

Sinon trainoo tu l'as developpé avec smarty ? t'as utilisé un framework ?

 

Trainoo c'est pas moi, et c'est du java.

 

Personnellement oui, je travaille avec smarty, mais sans framework.


Message édité par skeye le 24-09-2008 à 11:45:38

---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

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