Jump to content

[Résolu]Foreach, Produits Et Catégories


Recommended Posts

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 by AlexanderOs (see edit history)
Link to comment
Share on other sites

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 by Christophe Boix (see edit history)
Link to comment
Share on other sites

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

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 by franckm1000 (see edit history)
Link to comment
Share on other sites

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

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

 

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 by Christophe Boix (see edit history)
Link to comment
Share on other sites

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

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

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 . :)  :D  :lol:  

  • 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...