Smarty, creation de variables de conf {#var#} dynamique

Smarty, creation de variables de conf {#var#} dynamique - PHP - Programmation

Marsh Posté le 17-07-2011 à 02:05:00    

Yo all, je mets ça dans PHP même si c'est du smarty.
J'ai un problème un peu chiant en attendant pour y remédier je passe par un eval dans smarty, mais je suis sur qu'il y a forcément une solution beaucoup plus propre.
 
Je m'explique :  
Je gère le site de façon à ce qu'il soit multilingue, donc en fonction de la langue je charge un fichier .conf différent.
Dans le template .tpl, on se retrouve du coup avec des variables comme ça :  
 

Code :
  1. {#variable1#}


 
Pour mon menu qui est fixe, je gère récupères les catégories depuis une base, dans la base ce sont les identifiant des catégories. Donc au final dans le .tpl j'ai fait :

Code :
  1. <li>{#nav_identifiantcategory}</li>


Dans ce code la partie dynamique est identifiantcategory. J'ai chercher à pouvoir générer une variable de configuration pour qu'elle puisse être ensuite remplacée par le texte associé, mais je n'ai rien trouvé. Donc en attendant j'ai fait une solution sale :  
Ca marche mais je n'en suis pas fière.

Code :
  1. {eval var="{ldelim}#nav_`$cat->title`#{rdelim}"}


donc au final si $cat->title vaut "bidule", ce code génère :  

Code :
  1. <li>{#nav_bidule}</li>


 
 
Je suis preneur de toute solution moins sale :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 17-07-2011 à 02:05:00   

Reply

Marsh Posté le 17-07-2011 à 02:13:28    

Je me répond à moi même :  
En fouillant de plus près la page sur les variables de la doc de smarty :  
 
J'ai trouvé une solution toute conne, une variable de confi peut être atteinte par :  

Code :
  1. {$smarty.config.mavar}


qui peut aussi s'écrire :  

Code :
  1. {$smarty.config["mavar"]}


Du coup il suffit de gérer simplement la concaténation et on obtient :  

Code :
  1. {$smarty.config["nav_`$cat->title`"]}


 
Donc voili voilou, ça servira peut-être à quelqu'un un de ces jours :o


---------------
Blablaté par Harko
Reply

Sujets relatifs:

Leave a Replay

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