Aller au contenu

Une section Smarty


Sujets conseillés

Posté (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 smarty
require_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é par Kent
Posté

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.

Posté

C'est ce qu'on appele une réponse compléte, claire et directe. En plus ta solution fonctionne.

En un mot : Merci :)

Posté

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);
}

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...