Jump to content

[RESOLU] Tuto: générer une liste d'une table via smaty


Recommended Posts

Bonjour à tous,

 

 

Je cherche sans réel succès un tuto me permettant de faire une liste d'infos d'une table X sur ma page, sa partie php et sa version tpl pour récupéré les infos

 

Ça semble simple mais j'arrive pas a grand chose! Si une âme charitable pouvait me donner la méthode je lui en serais gré!

 

 

Merci par avance pour votre temps

Edited by daftfunk (see edit history)
Link to comment
Share on other sites

Alors je la refais depuis bédut

 

J'ai la table ps_orders que je veux parcourir et dont je veux afficher quelques informations

 

Voila mon code en PHP (je ne passe pas par les méthodes car je ne sais pas trop lequelles appellent quoi!

// Recuperation des infos des la commandes du client

$priprice = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'orders`
WHERE `id_customer` = \''.pSQL($cookie->id_customer).'\'
ORDER BY `id_order` ASC');


foreach ($priprice as $key => $priprice['id_order'] )
{  
 $priprice[$idorder] = $priprice['id_order'];
 $priprice[$idorder]->date_add = $priprice['date_add'];
 $priprice[$idorder]->total_paid = $priprice['total_paid'];
 }


// Assignation des valeurs
$smarty->assign(array(
'id_order' => $id_order,
'date_add' => $date_add,
'total_paid' => $total_paid
));

 

 

 

et puis dans le tpl

{foreach from=$priprice item=id_order}
	 <tr class="alternate_item">
<li>{$id_order|string_format:"%04d"}</li>

<li>{dateFormat date=$date_add} </li>

<li>{displayPrice price=$total_paid}</li>
{/foreach}

 

 

Bien entendu il y a rien qui fonctionne! mais je cherche, sachant qu'il me manque des notions sur les tableaux et que suis pas a l'abri d'une faute de syntaxe.

 

 

Merci pour l'aide au débogage!

Link to comment
Share on other sites

Ton code PHP est erroné à plusieurs endroits.

 

Pour commencer, saches que tu utilises une méthode quand même getRow de la classe Db ;)

 

Ensuite, la méthode getRow n'est pas intéressante car elle renvoie un singleton (le premier résultat) Dans ton cas, il faut utiliser la méthode Executes qui te renverra un tableau multidimensionnel.

 

Ensuite, ton foreach je comprends pas bien comment tu le construit avec ça:

$priprice as $key => $priprice['id_order']

 

En +, tu fais appel à une variable $idorder qui n'existe pas.

 

Enfin, plutôt que de construire une variable via un foreach et ensuite la "déconstruire" avec un nouveau foreach côté smarty, il vaudrait mieux envoyer directement le tableau via smarty et ensuite utiliser un foreach côté TPL pour lister chaque ligne du tableau.

 

Enfin, en amont en PHP, ne pas oublier de déclarer les variables globales:

global $smarty;
 global $cookie;

 $priprice = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'orders`
  WHERE `id_customer` = '.pSQL($cookie->id_customer).'
  ORDER BY `id_order` ASC');
 $smarty->assign('priprice',$priprice);

 

Côté TPL:

<table>
{foreach from=$priprice item=ordre}

 <tr>
	 <td>{$ordre.id_order}</td>
	 <td>{$ordre.date_add}</td>
		<td>{$ordre.total_paid}</td>
	</tr>
{/foreach}
</table>

 

Attention, deux conditions à ton code:

1. Que le client soit connecté sinon $cookie->id_customer est vide et le code ne renverra rien.

2. Bien sûr, que ce client ait fait une commande.

 

Côté PHP:

Edited by franckm1000 (see edit history)
  • Like 1
Link to comment
Share on other sites

Merci merci merci!

 

J'ai tellement lutté ... sans comprendre ce que je faisais!

 

Si j'ai bien compris la manip:

 

- getRow chope une "seule" ligne (comme son nom le suggère)

- ExecuteS chope l'intergralité de la table?

 

et la liste se crée dans le tpl avec {foreach}

 

J'ai observé des morceaux de code ou il me semblait qu'il fallait crée un tableau pour obtenir les listes et je comprenait pas ou le {foreach} devait se placé (coté smarty ou coté php). Il serait interessants de crée un espace ou des méthodes pour obtenir tel ou tel affichage serait un peut expliqué.

 

 

Quoi qu'il en soit merci mille fois!

Edited by daftfunk (see edit history)
Link to comment
Share on other sites

Foreach peut s'utiliser aussi bien en PHP qu'en TPL. Il m'arrive parfois d'utiliser des foreach en PHP pour construire des tableaux mais c'est dans des cas bien particuliers. Ici ton tableau est déjà créé.

 

Dans 95% des cas, foreach est fait pour lister et afficher le tableau, donc autant le faire du côté de l'affichage TPL.

  • Like 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...