anthoo12 Posted March 30, 2014 Share Posted March 30, 2014 Bonjour, J'ai parcouru ces derniers jours plusieurs forums à la recherche de cette information mais sans succès. Alors, j'ai une boucle {for $i=0 to 10}, dans laquelle j'aimerais afficher des variables en fonction de $i, ce sont des variables de type $var1, $var2, etc... Pour mieux comprendre, voici l'équivalent en php : <?php for($i=1; $i<10; $i++){ echo ${"var".$i}; } ?> Il faut donc pouvoir afficher $var1 quand $i est égal à 1, ainsi de suite. Le faire avec pleins de conditions est possible mais pas propre du tout je trouve.Merci d'avance pour votre aide Link to comment Share on other sites More sharing options...
J. Danse Posted March 30, 2014 Share Posted March 30, 2014 L'utilisation d'un array() serait plus propre et plus simple à mettre en place. Ce n'est pas envisageable ? Link to comment Share on other sites More sharing options...
anthoo12 Posted March 30, 2014 Author Share Posted March 30, 2014 J'ai exploré cette solution mais je n'arrive pas à lier les variables de mon contrôleur, les mettre dans un array passé vers mon .tpl Pour faire simple, je vais fournir la partie de mon code en question, il s'agit d'un module qui récupère des news dans la bdd prévue à cet effet et en affiche 10 (pour le moment). Le code de mon contrôleur : public function hookLeftColumn($params){ global $smarty; //charger smarty $sql = 'SELECT * FROM '._DB_PREFIX_.'module_news ORDER BY `news_id` DESC LIMIT 0 , 10'; //requête mysql dans la table "ps_module_news" if($results = Db::getInstance()->ExecuteS($sql)){ foreach($results as $row){ //Récupérer les champs de la table //Assigner array smarty (?) } } return $this->display(__FILE__, 'news.tpl'); //Afficher le .tpl } J'ai essayé plusieurs choses, mais jamais rien n'as fonctionné... Link to comment Share on other sites More sharing options...
J. Danse Posted March 30, 2014 Share Posted March 30, 2014 Et quelque chose de ce style ci ? public function hookLeftColumn() { $sql = 'SELECT * FROM '._DB_PREFIX_.'module_news ORDER BY `news_id` DESC LIMIT 0 , 10'; //requête mysql dans la table "ps_module_news" $results = Db::getInstance()->ExecuteS($sql); $this->context->smarty->assign('tableau', $results); return $this->display(__FILE__, 'news.tpl'); //Afficher le .tpl } Avec une utilisation de {$tableau[$i]} au sein du for Smarty, par exemple. Link to comment Share on other sites More sharing options...
anthoo12 Posted March 30, 2014 Author Share Posted March 30, 2014 Merci, c'est pas bête comme idée, le souci c'est que smarty affiche "array" lorsque je veut lui faire afficher {$tableau[$i]}, je me suis donc dit qu'il s'agissait d'un tableau à deux dimensions, j'ai donc imbriqué deux boucles pour afficher toutes les entrées du tableau, résultat : toutes vides ! N'y a-t-il vraiment aucun moyen de concaténer une variable à un nom de variable, comme en php ? çà me serais très utile également par la suite et je comprendrais mieux mon code également, puisqu'en php j'ai toujours fait comme çà. Link to comment Share on other sites More sharing options...
J. Danse Posted March 30, 2014 Share Posted March 30, 2014 Je ne pense pas que, mais je n'ai pas cherché. Si cela affiche array(), c'est parce qu'il s'agit d'un tableau. Par exemple {$tableau[$i].unnomdecolonnecontenudanslatable} devrait t'afficher ce que tu veux. C'est non seulement bien plus simple, propre et facile a gérer ;-) Link to comment Share on other sites More sharing options...
coeos.pro Posted March 30, 2014 Share Posted March 30, 2014 je suis pas sûre de comprendre, tu pars de loin avec ton premier message, tu souhaites bien récupérer les 10 dernières news de la table module_news et les afficher dans l'ordre décroissant ? si c'est bien ça, alors j'utiliserais la partie php donnée par J. : public function hookLeftColumn() { $sql = 'SELECT * FROM '._DB_PREFIX_.'module_news ORDER BY `news_id` DESC LIMIT 0 , 10'; //requête mysql dans la table "ps_module_news" $results = Db::getInstance()->ExecuteS($sql); $this->context->smarty->assign('tableau', $results); return $this->display(__FILE__, 'news.tpl'); //Afficher le .tpl } et en smarty: {foreach from=$tableau item=news} <p>News n°{$news.id_news}</p> <p>{$news.content}</p> {/foreach} c'est un exemple pour id_news et content, si tu n'es pas sûre du contenu de la variable tableau, met {debug} dans le code tpl, pas dans la boucle foreach évidemment. 1 Link to comment Share on other sites More sharing options...
anthoo12 Posted March 30, 2014 Author Share Posted March 30, 2014 Merci à vous, j'ai pas pensé qu'un tableau associatif pouvais être dans un tableau indexé, j'essaie çà demain et je vous dis ce qui a le mieux fonctionné Entre temps, si quelqu'un sait comment concaténer comme en php : ${'variable'+$i} , n'hésitez pas à partager votre savoir ! Link to comment Share on other sites More sharing options...
coeos.pro Posted March 30, 2014 Share Posted March 30, 2014 je ne comprend toujours pas le rapport entre concaténer des variables et afficher des news, mais passons, pourquoi concaténer les variables ? ce ne serait pas plus simple de concaténer leurs valeurs ? Link to comment Share on other sites More sharing options...
anthoo12 Posted March 30, 2014 Author Share Posted March 30, 2014 Par exemple : public function hookLeftColumn() { $sql = 'SELECT * FROM '._DB_PREFIX_.'module_news ORDER BY `news_id` DESC LIMIT 0 , 10'; //requête mysql dans la table "ps_module_news" if($results = Db::getInstance()->ExecuteS($sql)){ $i=0; foreach($results as $row){ $this->context->smarty->assign('news_id'.$i, $row['news_id']); $i++; } } return $this->display(__FILE__, 'news.tpl'); //Afficher le .tpl } comme çà j'aurais les variables news_id1, news_id2, etc... Il suffirais, dans smarty, de récupérer le tout comme ceci : {for $i=1 to 10} ${'news_id'.$i} {/for} Bien sur j'ai repris la syntaxe php dans mon code smarty, c'est juste un exemple. Le tout serais plus simple et plus court je trouve, et je sais qu'en php il m'arrive souvent de l'utiliser donc voilà pourquoi j'aimerais savoir si çà existe en code smarty. Link to comment Share on other sites More sharing options...
coeos.pro Posted March 30, 2014 Share Posted March 30, 2014 (edited) ok, je crois comprendre le problème, tu préfères utiliser for que foreach, mais dans ce cas je te conseil vraiment d'utiliser foreach c'est bien plus simple et si tu veux des clés (key) alors tu peux en smarty faire {foreach from=$tableau key=cle item=news} <p>{$news.content} = {$tableau.$cle.content}</p> {/foreach} un peu de lecture (avant d'aller te coucher) : http://www.smarty.net/docsv2/fr/language.function.foreach.tpl si tu veux rajouter un "compteur" soit tu utilises un {assign var="compteur" ...soit tu rajoutes name dans foreach {foreach from=$tableau key=cle item=news name=lesnews} et ensuite tu utilises news n°{$smarty.foreach.lesnews.iteration} Edited March 30, 2014 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
anthoo12 Posted March 31, 2014 Author Share Posted March 31, 2014 Merci coeos, j'ai réussi à faire ce que je voulais grâce à toi Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now