AlexanderOs Posted January 30, 2016 Share Posted January 30, 2016 (edited) Bonjour, Je fait un module pour mon site qui affiche des images produit de trois catégories en slider sur la page d'accueil. Récupération des ID des catégories enregistrer au préalable. $slider_1 = (int)(Configuration::get("Products_HOME_slider_1")); $slider_2 = (int)(Configuration::get("Products_HOME_slider_2")); $slider_3 = (int)(Configuration::get("Products_HOME_slider_3")); Je récupère les produits de chaque catégories. $productsData_slider_1 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_1, true); $productsData_slider_2 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_2, true); $productsData_slider_3 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_3, true); Je range tout ça dans un tableau. $tableau_global = array_merge($productsData_slider_1, $productsData_slider_2 $productsData_slider_3); Je créer le tableau de réception et une boucle que j'assigne à smarty et envoi au tpl $products = array(); $link = new Link(null, "http://"); foreach($tableau_global as $product){ $tmp = Product::getCover($product['id_product']); array_push($products, array( 'name' => $product['name'], 'link' => $link->getProductLink(new Product($product['id_product'])), 'image' => $link->getImageLink($product['link_rewrite'], $tmp['id_image']) )); } $this->smarty->assign(array( 'products' => $products, )); return $this->display(__FILE__, 'productshomeslider.tpl'); Dans le tpl je récupère les info avec $product.image $product.name $product.link mais le problème c'est qu'il me mélange tout les produits. Comment je pourrait faire pour trier les produits par catégorie dans le tpl pour chaque slider afin qu'il ne soit pas mélangé. Je peut créer une boucle pour chaque slider mais si je rajoute dix slides ça va me faire un code de 15 km donc pas très optimisé. Edited January 30, 2016 by AlexanderOs (see edit history) Link to comment Share on other sites More sharing options...
Christophe Boix Posted January 30, 2016 Share Posted January 30, 2016 (edited) Bonjour,tu peux essayer cela ( avant de faire ton array_merge ) :foreach($productsData_slider_1 as &$row){ $row['cat']=$slider_1;}foreach($productsData_slider_2 as &$row){ $row['cat']=$slider_2;}foreach($productsData_slider_3 as &$row){ $row['cat']=$slider_2;}voilà tu peux maintenant savoir à quelle catégorie appartient chaque item Edited January 30, 2016 by Christophe Boix (see edit history) Link to comment Share on other sites More sharing options...
AlexanderOs Posted January 30, 2016 Author Share Posted January 30, 2016 Merci Christophe, Mais si je fait un dump il me renvois l'id du $productsData_slider_1 pour tout les produits. Link to comment Share on other sites More sharing options...
Christophe Boix Posted January 30, 2016 Share Posted January 30, 2016 Puis-je voir le résultat dump stp ? Normalement si tu fais ce qui suit, tu as une colonne "cat" qui se rajoute avec la valeur du slider_1 ou slider_2 ou slider_3 . $slider_2 = (int)(Configuration::get("Products_HOME_slider_2")); $slider_3 = (int)(Configuration::get("Products_HOME_slider_3")); $productsData_slider_1 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_1, true); $productsData_slider_2 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_2, true); $productsData_slider_3 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_3, true); /* code à rajouter */ foreach($productsData_slider_1 as &$row){ $row['cat']=$slider_1; } foreach($productsData_slider_2 as &$row){ $row['cat']=$slider_2; } foreach($productsData_slider_3 as &$row){ $row['cat']=$slider_2; } /* fin code à rajouter */ $tableau_global = array_merge($productsData_slider_1, $productsData_slider_2 $productsData_slider_3); Link to comment Share on other sites More sharing options...
AlexanderOs Posted January 30, 2016 Author Share Posted January 30, 2016 voila Link to comment Share on other sites More sharing options...
franckm1000 Posted January 30, 2016 Share Posted January 30, 2016 (edited) Sinon tu peux faire çà, c'est pas forcément très optimisé mais au moins tu assignes trois tableaux distinctes pour tes trois slides (et de ce fait tu peux généraliser à n slides) dans ta vue te permettant de pouvoir organiser le TPL dans l'ordre que tu veux. De cette façon, tu enverras dans ta vue trois tableaux products1, products2 et products3 dédiés. $productsData_slider_1 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_1, true); $productsData_slider_2 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_2, true); $productsData_slider_3 = Product::getProducts($id_lang, 0, 0, "id_product", "ASC", $slider_3, true); $lTabProducts = array($productsData_slider_1, $productsData_slider_2, $productsData_slider_3); $link = new Link(null, "http://"); foreach($lTabProducts as $key => $tableau_global){ $products = array(); foreach($tableau_global as $product){ $tmp = Product::getCover($product['id_product']); array_push($products, array( 'name' => $product['name'], 'link' => $link->getProductLink(new Product($product['id_product'])), 'image' => $link->getImageLink($product['link_rewrite'], $tmp['id_image']) )); } $this->smarty->assign(array('products'.($key+1) => $products)); } return $this->display(__FILE__, 'productshomeslider.tpl'); Edited January 30, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Christophe Boix Posted January 30, 2016 Share Posted January 30, 2016 Normalement, la dernière valeur du array devrait être "cat" {$product.cat} Il devrait t'afficher l' ID de la catégorie dans ton fichier tpl. il faudra ensuite faire un code dans ce genre pour trier : {assign var=cat value=0} {foreach from=$products item=product} {if $cat!=$product.cat} CODE QUI PERMET DE DIFFERENCIER LES ITEMS {assign var=cat value=$product.cat} {/if} <li>.....</li> {/foreach} Link to comment Share on other sites More sharing options...
AlexanderOs Posted January 30, 2016 Author Share Posted January 30, 2016 J'ai compris la subtilité de cat au niveau du trie mais ce que je n'arrive pas a voir pourquoi il me ressort cette erreur a l'insertion de {$products.cat} ( ! ) Notice: Undefined index: cat in C:\wamp\www\monsite\tools\smarty\sysplugins\smarty_internal_templatebase.php(171) : eval()'d code on line 53 Comme si cat n’existe pas. Link to comment Share on other sites More sharing options...
Christophe Boix Posted January 30, 2016 Share Posted January 30, 2016 (edited) J'ai compris la subtilité de cat au niveau du trie mais ce que je n'arrive pas a voir pourquoi il me ressort cette erreur a l'insertion de {$products.cat} ( ! ) Notice: Undefined index: cat in C:\wamp\www\monsite\tools\smarty\sysplugins\smarty_internal_templatebase.php(171) : eval()'d code on line 53 Comme si cat n’existe pas. Non, c'est ça le bon code : {$product.cat} Danst on fichier php, peux tu faire un : print_r($tableau_global); die(); (juste après avoir déclaré $tableau_global ) puis me copie coller le résultat stp ? Edited January 30, 2016 by Christophe Boix (see edit history) Link to comment Share on other sites More sharing options...
AlexanderOs Posted January 30, 2016 Author Share Posted January 30, 2016 Merci Christophe viens de comprendre mon erreur enfin je pence je n'avais pas ajouter cat dans mon tableau 'cat' => $product['cat'] Maintenant product.cat fonctionne il me reste plus qu'a différencier les category dans le tpl. Je vous tien informé. Link to comment Share on other sites More sharing options...
Christophe Boix Posted January 30, 2016 Share Posted January 30, 2016 ok super ! petite astuce dans ton product_list.tpl qui permet de détecter si tu changes de catégorie, ça pourrait te servir..! il faudra ensuite faire un code dans ce genre pour trier : {assign var=cat value=0} {foreach from=$products item=product} {if $cat!=$product.cat} CODE QUI PERMET DE DIFFERENCIER LES ITEMS {assign var=cat value=$product.cat} {/if} <li>.....</li> {/foreach} Link to comment Share on other sites More sharing options...
AlexanderOs Posted January 30, 2016 Author Share Posted January 30, 2016 Voila le code que modifier. Je me sert des id catégories $this->smarty->assign(array( 'slider_1' => $slider_1, 'slider_2' => $slider_2, 'slider_3' => $slider_3, )); Je vérifie la correspondance {assign var=cat value=$slider_1} {foreach from=$products item=product} {if $cat==$product.cat} <div id="home_products_slide"></div> {/if} {/foreach} Cela fonctionne à merveille . 1 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