Jump to content
sjohanna

Afficher tous les produits des sous-catégories dans la catégorie parente.

Recommended Posts

Bonjour,

Je sais que ce que je demande dans le titre est possible très simplement en sélectionnant 2 catégories pour le produits: la catégorie principale et la sous-catégorie.

Mais celle solution ne me convient pas, car il me faut également afficher le titre des sous-catégories entre les produits puisque c'est celle page qui servira aux gens à commander les produits (moins de clicks).

Pourriez-vous m'aider ?

La page ressemblerait à ça:

Catégorie: PORTABLE (PAGE EN QUESTION)

Sous-catégorie: DELL
Liste de tous les produits DELL

Sous-catégorie: MAC
Liste de tous les produits MAC


Une idée ??
J'ai essayé de modifier les fichiers category.php et category.tpl mais je n'arrive pas à obtenir ce résultat pour le moment.

Merci !

Johanna

Share this post


Link to post
Share on other sites

J'ai vu que d'autres personnes seraient intéressé par une solution ?

Personne n'a une idée, ou au moins une direction vers laquelle je pourrai chercher ? (Du genre un module disponible que je pourrai personnalisé ?) Ou bien est-ce trop compliqué ?

Merci !

Johanna

Share this post


Link to post
Share on other sites

Ca ne vas pas si tu coche les deux catégories dans la fiche produit ?

Share this post


Link to post
Share on other sites

Si mais je n'ai pas les titres des sous-categories qui s'affichent entre les produits.

Il me faut:


PAGE/CATEGORIE PORTABLE

DELL
Liste de tous les produits DELL

MAC
Liste de tous les produits MAC

et non pas:



PAGE/CATEGORIE PORTABLE

Liste de tous les produits DELL
Liste de tous les produits MAC

Share this post


Link to post
Share on other sites

ah pardon, je n'avais pas compris,
ou il faut boucler récursivement sur les catégories pour enregistrer tous les produits, et les afficher; La je n'ai pas le temps de regarder, désolé

Share this post


Link to post
Share on other sites

Merci pour la reponse... Il y a donc de l'espoir !

Si jamais tu as un peu plus de temps, cela me serait vraiment tres utile... Meme un debut d'idee et je pourrai tjs essayer de terminer...

Johanna

Share this post


Link to post
Share on other sites

Bonjour, c'est encore moi.

Je n'ai toujours pas résolu mon problème, par contre, j'ai fait des impressions écrans pour expliquer ce que je cherche à faire.

Je serai très très très reconnaissant à celui qui m'aidera à trouver la solution.... le site doit être mis en ligne sous peu, et c'est vraiment une fonctionnalité importante...

Avec davantage de recherche, j'ai vu que ce n'était pas si simple que cela.

Plutôt que d'attribuer les produits dans la Sous-Catégorie et la Catégorie parente, je pense qu'il faudrait seulement afficher les sous-catégories et leurs produits directement sur la page Parente...

Merci d'avance...

28496_GtCjSdVdBzzCSsnD0yJg_t

28497_5471T2MIBYgnm5asW9N0_t

Share this post


Link to post
Share on other sites

Toujours personne n'a une idee??

C'est vraiment important... Le site va être bientôt en ligne, et c'est une fonctionnalités importante.

Je sais que cela nécessite peut-être plus qu'une simple astuce, mais ce serait cool de me mettre sur la voie :)

Merci !

Share this post


Link to post
Share on other sites

Rapidement :
category.php a la racin, ligne 60 :

foreach ( $subCategory as $sub_cat)
{
$souscat[$sub_cat['id_category']] = $category(intval($cookie->id_lang),true,$sub_cat['id_category'])
}
$smarty->assign('sousCategorie',$souscat);



Class / Category.php ligne 301

public function getSubCategory($id_lang,$active = true,$id_category = $this->id)
{

remplacer $this->id par $id_category

}



a corriger, mais c est le principe

Share this post


Link to post
Share on other sites

Merci beaucoup pour ta réponse.

Malheureusement, je crois que je ne suis pas assez bonne pour faire marcher les bouts de codes que tu m'as donné.

Je comprendrai si tu n'as pas beaucoup de temps, mais j'apprécierai chaque minute que tu pourras m'accorder.

Les premières lignes de codes que tu me donnes... doivent-elles remplacer qqch ou s'insérer entre:

        if (Db::getInstance()->numRows())
           $smarty->assign('subcategories', $subCategories);



et

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



Quand j'insère les lignes entre les deux, sans rien changer, la page "categorie" ne s'affiche même plus sur le site.
J'ai essayé de voir s'il y avait un problème dans le code mais je ne m'y connais pas assez malheureusement.

Merci !

Share this post


Link to post
Share on other sites

C'est juste pour aider "une astuce" le "a corriger, mais c'est le principe" veut dire que le code n'est pas fonctionnel, il n'est pas complet, je ne l ai pas testé et il manque quelques lignes, il n y a pas la partie affichage qui vas se trouver dans le category.tpl

Share this post


Link to post
Share on other sites

Fair enough...

Je crois que je ne suis pas assez bonne pour suivre une astuce, je vais donc abandonner...

Merci quand meme !

Share this post


Link to post
Share on other sites

Désolé, j'avais lu, "une simple astuce" au lieu de "plus qu’une simple astuce".

- Quels sont vos connaissances ? Savez vous modifier un thème, pour utiliser d'autres variables ?
- Je pense qu'un développeur pourrait faire cette modification pour quelques dizaines d'euros.

Share this post


Link to post
Share on other sites

Mes connaissances se limitent à tout ce qui est CSS et design.
Cela veut dire que je sais reconnaître des éléments dans des fichiers PHP et Smarty, donc je bidouille pas mal pour arriver à mes fins, mais je ne peux pas vraiment créer du code moi-même.

Je cherche des modules, des gens sur le forum qui ont eu le même problème que moi, mais là, ça ne suffit pas.

Je serai heureuse de payer qqun une dizaine d'euros pour cette fonctionnalités. Pourrais-tu le faire toi-même ? Ou connaîs-tu qqn qui ne me chargerait pas pour 2h de travail ?

Merci !

Johanna

Share this post


Link to post
Share on other sites

Up pour ce post, la solution m'intéresse aussi, mais je n'ai pas réussi à mettre en œuvre le début de solution proposé.
Un peu d'aide svp ?

Share this post


Link to post
Share on other sites

Bonjour!

Je recherche également une solution à cette question!

Quelqu'un aurait-il un peu de temps de nous indiquer les codes à changer dans categoty.php et dans category.tpl?

Merci d'avance!!

Share this post


Link to post
Share on other sites

J'exume ce vieux thread, car j'ai la même question, mais sous PS 1.4.2.
J'ai donc copié le CategoryController dans override, et j'ai essayé ce code :

foreach($subCategories as $subCategory) {
   $cat = new Category($subCategory['id_category'], self::$cookie->id_lang);
   $subProducts[$subCategory['id_category']] = $cat->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay);
}
self::$smarty->assign('subProducts', $subProducts);


juste après la recherche des sous catégories (vers la ligne 108)
Ensuite, j'essaye d'afficher le contenu dans le template, mais ça ne fonctionne pas. J'ai lancé le debug smarty, qui m'indique que les lignes de mon tableau $subProducts sont vides (mais elles sont bien créées avec l'id de la sous catégorie comme clef).
Donc je suppose que c'est la fonction getProducts qui ne marche pas dans ce contexte...
Une idée de pourquoi ?

Merci.

Share this post


Link to post
Share on other sites

J'ai trouvé ! En fait, mon code était bon, c'est juste que je mettais pas les bons paramètres à getProducts. Le deuxième et troisième paramètres sont là pour indiquer le LIMIT de la requête. Ils sont calculés par la fonction pagination. Voici donc le bon code :

$subProducts = Array(); // le tableau dans lequel on va mettre les produits trouvés
foreach($subCategories as $subCategory) { // on fait le tour des sous catégories
   $cat = new Category((int)$subCategory['id_category'], (int)(self::$cookie->id_lang)); // on instancie la catégorie avec son numéro
   $nbSubProducts = $cat->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true); // on compte le nombre de produit contenus dans cette catégorie
   $this->pagination((int)$nbSubProducts); // on calcul la pagination
   $subProducts[$subCategory['id_category']] = $cat->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay); // on recherche les produits on fonction de la pagination
}
self::$smarty->assign('subProducts', $subProducts); // on assigne le résultat au template


J'ai personnellement ajouté ce code dans CategoryController, mais dans le dossier override, au niveau de la ligne 134 à l'intérieur du if(subCategories)

Ensuite j'utilise ça pour afficher les produits des sous catégories dans des onglets jqueryui. Du coup, je ne met aucun produit dans la catégorie, mais tous dans la sous catégorie, et on passe de l'une à l'autre avec les onglets.

Je vous donne pas tout le code, mais en gros, dans le template, ça donne ça :



           {foreach from=$subcategories item=subcategory}

{$subcategory.name|escape:'htmlall':'UTF-8'}

           {/foreach}

           {foreach from=$subProducts item=subproduct key=id}

               {include file="$tpl_dir./product-compare.tpl"}
               {include file="$tpl_dir./product-sort.tpl"}
               {include file="$tpl_dir./product-list.tpl" products=$subproduct}
               {include file="$tpl_dir./product-compare.tpl"}
               {include file="$tpl_dir./pagination.tpl"}

           {/foreach}





Et quand même, ça marche rudement bien. Sans avoir jamais rien codé sous PS, j'ai pu analyser le code et retrouver mes petits en quelques heures.

Share this post


Link to post
Share on other sites

bonjour Matthieu

je voulais faire presque la même chose: je veux afficher quelques produits pour chaque sous-catégories juste au dessous du nom

CAT MERE

SOUS-CAT1

-produit1

-produit2

-produit3

 

SOUS-CAT2

-produit1

-produit2

-produit3

 

SOUS-CAT3

-produit1

-produit2

-produit3

j'ai ajouter ce bout de code dans le fichier classes/category.php L480

foreach ($result AS &$row)
 {

/*debut code ajoute*/
$subC=new Category($row['id_category']);
           $row['nbProducts']=$subC->getProducts((int)($cookie->id_lang),NULL,3,$this->orderBy, $this->orderWay, true);
           $row['products']=$subC->getProducts((int)($cookie->id_lang),NULL,3,$this->orderBy, $this->orderWay);
/*fin code ajoute;*/
  $row['id_image'] = (file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'.jpg')) ? (int)($row['id_category']) : Language::getIsoById($id_lang).'-default';
  $row['legend'] = 'no picture';
 }

et dans le fichier category.tpl j'ai ajouter ça pour l'afficher

{if $subcategory.nbProducts>0 }
      {include file=$tpl_dir./product-list.tpl products=$subcategory.products}
               {/if}
  </li>
  {/if}

en FO je n'ai que les images et les prix ^_^ mais pas les noms et les description courtes :huh:

quelqu'un à une idée pourquoi le requête ne retourne pas ni les noms ni les descriptions des produits?

je travaille avec la version 1.4.5.1

Share this post


Link to post
Share on other sites

D'abord, tu devrais faire ça dans le dossier override, sinon, à la prochaine mise à jour de PS, tu vas être embêté.

Ensuite, je ne comprends pas pourquoi tu n'as pas repris mon code tel quel ? Vu que le mien fonctionne, tu devrais partir de celui-là, puis éventuellement remettre les limites pour en sélectionner que 3...

Share this post


Link to post
Share on other sites

Merci Matthieu pour le conseil

en faite c'est ce que j'ai fait à l'aide de ce post et j'ai bien utilisé le dossier override et maintenant ça marche nickel.

Share this post


Link to post
Share on other sites

Hello,

 

Pour ceux qui souhaite afficher les Produits des Sous-Categories dans la page Categorie voici une modif qui fonctionne sur Prestashop 1.4.6.2 :

 

Modification du fichier controllers/CategoryContraller.php en dessous de en ligne 152 :

   if (isset(self::$cookie->id_compare))
 self::$smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)self::$cookie->id_compare));

 

Ajouter :

	  $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(intval(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);
			 }
	  self::$smarty->assign('subProducts', $subProducts);

 

Puis dans le fichier category.tpl de votre theme :

 

 {foreach from=$subcategories item=subcat name=subcategories}
  <h2>{$subcat.name|upper}</h2>
   {if isset($subProducts[$subcat.id_category][0]['name'])}
 {include file="$tpl_dir./product-list.tpl" products=$subProducts[$subcat.id_category]}
 {include file="$tpl_dir./pagination.tpl"}
   {elseif !isset($subProducts[$subcat.id_category][0]['name'])}
 <p class="warning">{l s='There are no products in this category.'}</p>
   {/if}
 {/foreach}

 

si ca aide qq'un qui cherche !

Cordialement.

Share this post


Link to post
Share on other sites

Bonjour Matthieu,

J'ai utiliser ton code qui fonctionne parfaitement. Donc merci pour ce partage. Seul petit hic je n'ai pas le nom de chaque sous-catégories mais 3 fois le même nom de ma dernière catégories. (j'ai 3 sous catégories à chacune de mes catégories).

Pourtant j'appelle le nom de la sous-catégorie ($subcategory.name)

En fait si je créer une deuxième {foreach from=$subcategories item=subcategory} il m'appelle bien mes 3 sous catégories mais sans itération (il me mets les 3 les une sur les autres dans chaques "titre" de la sous cat.

La solution est surement simple ?

Merci de ta réponse.

En fait j'ai pu lire ta réponse à Hulk du coup tout roule.

Merci pour cette solution bien sympatique.

Share this post


Link to post
Share on other sites

Bonjour, ce sujet est ce que je recherche, mais est -il possible de la faire sous prestashop 1.3.7 car je n'ai pas de dossier override ? quelqu'un aurait la solution svp?

Share this post


Link to post
Share on other sites

Bonjour, ce sujet est ce que je recherche, mais est -il possible de la faire sous prestashop 1.3.7 car je n'ai pas de dossier override ? quelqu'un aurait la solution svp?

Share this post


Link to post
Share on other sites

Non je n'ai toujours pas trouvé, aurrais-tu une solution.

Merci

Share this post


Link to post
Share on other sites

Hello,

 

Pour ceux qui souhaite afficher les Produits des Sous-Categories dans la page Categorie voici une modif qui fonctionne sur Prestashop 1.4.6.2 :

 

Modification du fichier controllers/CategoryContraller.php en dessous de en ligne 152 :

 

if (isset(self::$cookie->id_compare)) self::$smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)self::$cookie->id_compare));

 

 

Ajouter :

 

	  $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(intval(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay);			 }	  self::$smarty->assign('subProducts', $subProducts);

 

 

Puis dans le fichier category.tpl de votre theme :

 

 

 {foreach from=$subcategories item=subcat name=subcategories}  <h2>{$subcat.name|upper}</h2>{if isset($subProducts[$subcat.id_category][0]['name'])} {include file="$tpl_dir./product-list.tpl" products=$subProducts[$subcat.id_category]} {include file="$tpl_dir./pagination.tpl"}{elseif !isset($subProducts[$subcat.id_category][0]['name'])} <p class="warning">{l s='There are no products in this category.'}</p>{/if} {/foreach}

 

 

si ca aide qq'un qui cherche !

Cordialement.

 

 

La première partie je l'ai ajouté au php mais la deuxième partie tpl , j'ai beau essayer , modifier différemment ça ne marche pas

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More