Smarty - variables

lux
Eléphant du PHP | 372 Messages

26 avr. 2008, 15:28

Hello tout le monde.
J'ai une question, et j'aurais besoin d'un spécialiste smarty :P

Alors j'ai qqch comme :
{foreach from=$array_cat item=data}
<li>{$data.cat_fr}</li>
{/foreach}
Voila, alors, j'aimerais que le fr soit dynamique, c'est soit un fr,uk,de en fonction de la langue chargée. J'ai bien sur une variable $lang qui contient le bon uk,fr ou de.
Je pensais faire
{$data.cat_$lang}
Mais ça ne marche pas, et j'ai aussi essayé différentes sans trop de succès. La doc de smarty n'en parle pas (ou j'ai zappé un truc), et leur forum, pour y trouver un truc, faut se lever tot :roll:

Une idée ? Merci d'avance :wink:

ViPHP
ViPHP | 5924 Messages

26 avr. 2008, 18:30

Tu peux essayer de faire une fonction pour te le faire, après je n'ai plus trop de restes concernant Smarty, cela fait déjà longtemps que j'ai abandonné, mais je ne vois rien d'autre…
Essaye peut être aussi pour tester $data.$cat en ayant assigné la bonne valeur à $cat…

Eléphant du PHP | 422 Messages

27 avr. 2008, 09:27

Tu peux regarder du côté des tableaux à deux dimensions
// ---- fichier PHP -----
$cats = array (0=>array ("fr"=>"catégorie 0", "uk"=>"category 0"),
			   1=>array ("fr"=>"catégorie 1", "uk"=>"category 1")
		);
$smarty->assign("lang", "uk");
$smarty->assign("cats", $cats);
// ---- fichier template -----
<h3>{$lang}</h3>
<h4>Avec section</h4>
{section loop=$cats name=i}
  <li>{$cats[i][$lang]}</li>
{/section}
<h4>Avec foreach</h4>
{foreach from=$cats item=cat}
  <li>{$cat[$lang]}</li>
{/foreach}

lux
Eléphant du PHP | 372 Messages

27 avr. 2008, 11:02

Finalement après avoir un peu réfléchi, et que mon problème est un peu plus complexe, je vais faire court pour expliquer la ou ça coinçait, finalement j'ai pu garder ma structure en changeant deux trois trucs.

En fait dans ma BDD j'ai deux champs, cat_fr et cat_uk. Donc dans mon foreach, je dois faire un appel cat_fr et cat_uk, et ça pour chaque tour de boucle pour afficher les 2 langues (dans l'admin).
Donc pour chaque ligne d'une catégorie je fais une boucle sur un array contenant 'fr' et 'uk' (ici la première ligne avec le $lang.short :
{assign var='lang_cat' value=$lang.short}
{assign var='cat' value=cat_$lang_cat}
Et ensuite j'assigne devant le 'cat_', et je peux ainsi utiliser la variable 'cat' que j'ai ainsi crée pour appeller la bonne valeur dans la boucle.

Si vous avez rien compris c'est pas grave en tout cas ça marche :P

Le problème venait du fait qu'on peut pas faire de suite :
{assign var='cat' value=cat_$lang.short}
smarty aime pas trop ça :oops:

Merci pour les conseils 8-)

ViPHP
ViPHP | 5924 Messages

27 avr. 2008, 11:20

Si, suffit de faire :

Code : Tout sélectionner

{assign var="cat_`$lang.short`"}
Faut lire la doc hein :)

lux
Eléphant du PHP | 372 Messages

27 avr. 2008, 11:25

Ha oui tiens ça marche :P

Par contre la doc, la lire, je fais que ça, mais j'ai du zapper ce passage.
par la en tout cas ça parle pas de ça ?

:oops: :oops: