Jump to content

serait-ce impossible ? > affichage des produits classés par sous catégorie


Recommended Posts

salut la communauté.

j'ai toujours trouvé des réponses à mes questions sur le forum, mais là, je ne trouve pas.

je souhaite que mes catégories affichent mes produit classés par sous catégorie.

EX:

catégorie

- titre sous catégorie 1
produits de la sous catégorie 1

- titre sous catégorie 2
produits de la sous catégorie 2

- titre sous catégorie 3
produits de la sous catégorie 3
....

j'ai adapté mon product-list.tpl comme ceci :

{if isset($subcategories)}
{foreach from=$subcategories item=subcategory}
{$subcategory.name|escape:'htmlall':'UTF-8'}
{foreach from=$products item=product name=products}
{assign var='productLink' value=$link->getProductLink($product.id_product, $product.link_rewrite, $product.category)}






    {$product.name|truncate:25|escape:'htmlall':'UTF-8'}

{$product.description_short|truncate:30:'...'|strip_tags:'UTF-8'}



{displayWtPrice p=$product.price}              


{/foreach}

{/foreach}




mais je n'arrive pas à afficher uniquement les produits de la sous catégorie.

{foreach from=$products item=product name=products}



tous les produits s'affichent.

j'essaie de modifier mon category.php

    $category->name = Category::hideCategoryPosition($category->name);
       $category->description = nl2br2($category->description);
       $subCategories = $category->getSubCategories(intval($cookie->id_lang));
       $sub_products = $subCategories->getProducts(intval($cookie->id_lang), intval($p), intval($n), $orderBy, $orderWay);

       $smarty->assign('category', $category);
       if (Db::getInstance()->numRows())
           $smarty->assign('subcategories', $subCategories);
       if ($category->id != 1)
       {
           $nbProducts = $category->getProducts(NULL, NULL, NULL, $orderBy, $orderWay, true);
           include(dirname(__FILE__).'/pagination.php');
           $smarty->assign('nb_products', $nbProducts);
           $cat_products = $category->getProducts(intval($cookie->id_lang), intval($p), intval($n), $orderBy, $orderWay);
       }
       $smarty->assign(array(
           'products' => (isset($cat_products) AND $cat_products) ? $cat_products : NULL,
           'subproducts' => $sub_products,
           'id_category' => intval($category->id),
           'id_category_parent' => intval($category->id_parent),
           'return_category_name' => Tools::safeOutput(Category::hideCategoryPosition($category->name)),
           'path' => Tools::getPath(intval($category->id), $category->name),
           'homeSize' => Image::getSize('home')



en ajoutant :

 $sub_products = $subCategories->getProducts(intval($cookie->id_lang), intval($p), intval($n), $orderBy, $orderWay);


'subproducts' => $sub_products,



pour pouvoir faire un :

{foreach from=$subproducts item=subproduct name=subproducts}



mais ça ne fonctionne pas.

quelqu'un pourrait-il m'indiquer comment récupérer uniquement les produits des sous catégories pour les afficher dans mon loop ?

merci par avance

Link to comment
Share on other sites

Je serai également très intéressé, quelqu'un pourrait me (nous) dépanner ?
Juste la marche à suivre, j'ai tenté ceci moi : (fichier category.php)

if (Db::getInstance()->numRows())
       {
           $souscategories = array();
           $i = 0;
           $nb = 0;
           foreach($subCategories as $souscategorie)
           {
               $categorie = new Category(intval($souscategorie->id_category), intval($cookie->id_lang));
               $cats[] = $categorie;
               $produits = $categorie->getProducts(intval($cookie->id_lang), intval($p), intval($n), $orderBy, $orderWay);
               $souscategories[] = array('name' => Category::hideCategoryPosition($categorie->name),
                                         'produits' => $produits);

               if($categorie->getProducts(NULL, NULL, NULL, $orderBy, $orderWay, true) > 0)
                   $nb++;

               $i++;
           }


           $smarty->assign('subcategories', $subCategories);

           if($nb > 0)
           {
               $smarty->assign('souscategories', $souscategories);
           }

       }



Mais dans le fichier category.tpl, la variable $souscategories semble vide... bizarre !

Link to comment
Share on other sites

  • 3 weeks later...

Voici comment je me suis débrouillé pour faire ça. Je bosse sur une version 1.4 de Prestashop.

J'ai dupliqué le CategoryController que j'ai placé dans override pour pouvoir le modifier sans toucher au core (voir ce sujet du forum).

Dans ce controller, j'ai modifié ça :

$this->category->description = nl2br2($this->category->description);
$subCategories = $this->category->getSubCategories((int)(self::$cookie->id_lang));
self::$smarty->assign('category', $this->category);
if (Db::getInstance()->numRows())
{
   self::$smarty->assign('subcategories', $subCategories);
   self::$smarty->assign(array(
   'subcategories_nb_total' => sizeof($subCategories),
   'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));

   // mes ajouts
   $subProducts = array();

   foreach($subCategories as $subCat)
   {
       $tmp_cat_obj = new Category($subCat['id_category'], self::$cookie->id_lang);
       $subProducts[$subCat['id_category']] = $tmp_cat_obj->getProducts((int)(self::$cookie->id_lang), (int)($this-p), (int)($this->n), $this->orderBy, $this->orderWay);
   }

   self::$smarty->assign('subProducts', $subProducts);
}



Donc, pour chaque sous catégorie, je récupère les produits, que je place dans un tableau associatif dont la clé est l'id de la catégorie.

Ensuite, dans mon template :

{foreach from=$subcategories item=subcat name=subcategories}
{$subcat.name|upper}
{assign var='tmp_prod' value=$subProducts[$subcat.id_category]}
{foreach from=$tmp_prod item=prod name=tmp_prod}
   {$prod.name}
{/foreach}
{/foreach}

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

J'ai trouvé, il suffit de mettre ce code dans ton template :

{foreach from=$subcategories item=subcat name=subcategories}
{strip}{$subcat.name|escape:'htmlall':'UTF-8'}
      {assign var='tmp_prod' value=$subProducts[$subcat.id_category]}
      {if $tmp_prod} {include file="$tpl_dir./product-list.tpl" products=$tmp_prod} {/if}
{/foreach} 

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