Kent Posté 13 Février 2007 Posté 13 Février 2007 (modifié) Bonjour à tous, voilà je commence à m'initier aux moteurs de template. J'ai trouver un tutorial sympathique sur Smarty alors je me suis lancer sur ce moteur-ci. Le probléme est que dés le commencement j'ai du mal et je bloque sur une boucle. D'un coté mon fichier php <?php// Inclure la librairie smartyrequire_once('libs/smarty.class.php');// Instancier notre objet smarty$oSmarty = new Smarty();// 1. Création et affectation d'un tableau indexéinclude("inc/dbconnect.php"); // On etablie la conex$req = mysql_query("SELECT * FROM ga_membres");while($membre = mysql_fetch_array($req)){$oSmarty->assign('lemembre',$membre); }mysql_close();// 3. Affichage du template après passage de l'objet$oSmarty->display('tabIndexe.tpl');?> Et de l'autre mon .tpl <ul> {section name=membre loop=$lemembre} <li>Pseudo : {$lemembre[membre].pseudo}</li> {/section}</ul> Je voudrais tout simplement lister tous les pseudo des membres. Mais j'ai un resultat étrange. # Pseudo : 6# Pseudo : i# Pseudo : 0# Pseudo : F# Pseudo : r# Pseudo : 1# Pseudo : C Quelqu'un a une idée ? c'est bien la bonne façon de faire pour lister un tableau associatif ? Merci. Modifié 13 Février 2007 par Kent
TheRec Posté 13 Février 2007 Posté 13 Février 2007 Bonjour, Je n'utilise pas Smarty, mais ma compréhension de ce que tu fais est la suivante : $oSmarty->assign('lemembre',$membre); Tu assigne à la variable $lemembre de ton template la valeur de $membre qui prend sa valeur depuis la fonction mysql_fetch_array. Donc tu récupères un enregistrement de ton recordset ($req) sous forme de tableau et tu l'assignes à cette variable $lemembre. À chaque itération de la boucle tu remplaces ta variable $lemembre et donc en fin de boucle tu n'auras plus que le dernier enregistrement. Ensuite dans le fichier .tpl lorsque tu essaies d'afficher cette variable elle ne contient qu'un tableau (correspondant à ce dernier enregistrement), donc tu parcours (avec la boucle section) les champs, alors que ton but était de parcourir un tableau contenant chaque ligne de ta base. Pour remédier à cela je ferais ainsi : $req = mysql_query("SELECT * FROM ga_membres");$membres = array();while($membre = mysql_fetch_array($req)) { $membres[] = $membre;}$oSmarty->assign('lemembre',$membres); Ainsi ta variable $lemembre sera un tableau de tableaux et lorsque tu le parcourra avec la boucle section chaque itération correspondra à une ligne de ton recordset. Maintenant, pourquoi obtiens-tu ces résultats "bizarres" ? Je suppose que tu as 7 champs dans la table "ga_membres" et comme je l'ai dit précédemment ta variable $lemembre contient qu'un seul enregistrement et donc lorsque tu parcourrais ce tableau tu ne récupérais qu'un caractère (car lorsque tu utilise $var[x] et que $var et une chaîne de caractères tu accède au caractères correspondant à la position "x") pour chaque champ.
Kent Posté 13 Février 2007 Auteur Posté 13 Février 2007 C'est ce qu'on appele une réponse compléte, claire et directe. En plus ta solution fonctionne. En un mot : Merci
vanadium Posté 20 Février 2007 Posté 20 Février 2007 Le plus judicieux est encore d'utiliser la méthode Smarty dejà prévue pour ça : $req = mysql_query("SELECT * FROM ga_membres");while($membre = mysql_fetch_array($req)) { $smarty->append('membres',$membre);}
TheRec Posté 20 Février 2007 Posté 20 Février 2007 Très juste. C'est ce que je disais, je ne connais et n'utilise pas Smarty
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant