Jump to content

Obtenir le nom des catégories à partir de l'ID catégorie


Recommended Posts

Bonjour presta sous version 1.4.7.3 je désire créer une boucle afin de repertorier les sous catégories contenu dans une catégories en particulier. J'ai essayer de récuperer ça dans le block menu et de comprendre son fonctionnement. Sans aucun résultat.

 

Cette page s'appelle boutique.tpl, j'ai créer boutique.php fait les déclarations elle s'affiche correctement mais il me manque cette boucle.

 

 

Merci d'avance

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

 

Je crois que je recherche à peu près la même chose que vous.

 

Mon but est d'afficher les sous-catégories des sous-catégories lorsqu'on se trouve sur la page d'une catégorie.

C'est à dire, je clique sur ma Catégorie 1 et là j'ai par défaut une page qui affiche le nom de la catégorie courante et en dessous une liste de ses sous catégories.

 

Donc :

Catégorie 1

- Sous Catégorie 1

- Sous Catégorie 2

- Sous Catégorie 3

 

Et je voudrais afficher :

Catégorie 1

- Sous Catégorie 1

- Sous-sous catégorie 1

- Sous-sous catégorie 2

- Sous Catégorie 2

- Sous-sous catégorie 1

- Sous-sous catégorie 2

- Sous Catégorie 3

- Sous-sous catégorie 1

- Sous-sous catégorie 2

 

 

 

Sur le principe j'arrive à comprendre le code en smarty qu'il me faut, mais je ne sais pas comment trouver la variable "sous-sous catégorie".

 

Dans le fichier category.tpl avant la fin de ma boucle foreach qui affiche mes sous catégorie il faut un code qui ressemble à ça (selon la logique, mais il me manque des éléments de syntaxe...) :

 

{foreach $subcategory.children}

<li>

<a href="$subcategory.children.link">

{$subcategory.children.name}

</a>

</li>

{/foreach}

 

 

Voilà pour le principe, si des pros pouvaient nous aider ce serait super, car je ne trouve pas le $subcategory.children, ou s'il faut une fonction pour contourner ???

 

Merci d'avance

 

Madeline

Link to comment
Share on other sites

Nouvelle piste que j'ai trouvé en cherchant sur le forum, mais c'est du code pour une version antérieure à l'actuelle. J'ai adapté, changé, réfléchis, mais ça ne fonctionne toujours pas, je ne suis peut-être pas loin du but. Personne pour m'aider ?

 

Dans le fichier CategoryController.php (prestashop->controllers).

Ligne 121 j'ai rajouté :

$this->category->description = nl2br2($this->category->description);
   $subCategories = $this->category->getSubCategories((int)self::$cookie->id_lang);
   //self::$smarty->assign('category', $this->category);




   /**Ajout de l'affichage des catégories enfants **/
	  self::$smarty->assign('category', $this->category);
	  foreach ($subCategories AS $subcat) {
		 $child = new category(intval($subcat['id_category']), intval($cookie->id_lang));
		 $children = $child->getSubCategories(intval($cookie->id_lang));
		 $result[] = array('id_category'=> $subcat['id_category'],
				    'name'=> $subcat['name'] ,
				    'id_image'=> $subcat['id_image'],
				    'legend'=> $subcat['legend'] ,
				    'children'=> $children
			    );
	  }

	  //if (Db::getInstance()->numRows())
		  self::$smarty->assign('subcategories', $result);
   /** Ajout de l'affichage des catégories enfants **/

 

 

Et dans category.tpl (theme->montheme->category.tpl) ligne 91


   {if $subcategory.children}
 <p>{$subcategory.children.name}</p>
   {/if}

 

Un petit coup d'pouce please :-)

Link to comment
Share on other sites

Merci Dev On Web pour cette piste, je suis en train d'essayer pour l'instant ça ne fonctionne pas mais je continue d'essayer.

 

Une capture du résultat que j'aimerais obtenir, donc la seule chose qu'il me manque c'est la liste des sous-sous catégories (en gris clair, sous "Sportives").

 

31943_capture_subcategories.jpg

 

Une fois que j'aurais réussi à afficher les sous-sous catégories la prochaine étape ce sera le jQuery, afin de rendre dynamique, lorsque je survole le lien je veux afficher la photo de la moto correspondante. Mais ça c'est encore un autre sujet.

Link to comment
Share on other sites

J'ai modifier/adapter le code, car la syntaxe change entre les anciennes versions de PS et la dernière en date.

 

Donc dans categorycontrollers.php

 

J'ai la création d'un tableau pour les enfants des sous-catégories :

self::$smarty->assign('category', $this->category);
	    foreach ($subCategories AS $subcat)
	    {
		    $child = new Category((int)($subcat['id_category']), (int)self::$cookie->id_lang);
		    $children = $child->getSubCategories((int)self::$cookie->id_lang);
		    $result[] = array('id_category'=> $subcat['id_category'],
					 'name'=> $subcat['name'] ,
					 'id_image'=> $subcat['id_image'],
					 'legend'=> $subcat['legend'] ,
					 'children'=> $children);
	    }

	    //if (Db::getInstance()->numRows())
		   self::$smarty->assign('subcategories',$this->result);

 

 

 

Et dans le category.tpl une boucle pour afficher le tableau :

{foreach from=$subcategories->children item=childen name=child}
    <a>
    {$child.name|escape:'htmlall':'UTF-8'}</a>


   {if $smarty.foreach.children.last}{else}<br/> - {/if}
   {/foreach}

 

J'ai beau tester etc je n'arrive pas à faire fonctionner ça... il faut absolument que je trouve et cela devient urgent car nous voulons lancer le site...

J'ai déjà regardé sur le site Addons et je n'ai rien trouvé qui y correspond. Je comprends PHP et Smarty mais c'est encore difficile pour moi, étant novice, je suis bien plus à l'aise avec du html et du css, pour l'intégration du thème il m'a à peine fallu quelques jours, mais là sur le développement plus poussé je n'y arrive pas :(

 

Je ne sais vraiment plus vers qui me tourner, je suis seule à m'occuper du site...

Link to comment
Share on other sites

J'ai enfin trouvé une solution.

Je suis déçue par le fait qu'une seule personne s'y soit intéressée. J'avais choisi Prestashop dont je n'ai entendu que des avantages, notamment à propos de la communauté francophone.

Bref je pensais qu'il y avait une meilleure entraide, mais visiblement ce n'est pas (ou plus?) le cas, vraiment dommage.

 

Voici mon bout de code dans le fichier controllers/CategoryController.php (vers la ligne 121 à 155):

if (isset($subCategories) AND !empty($subCategories) AND $subCategories)
   {
 self::$smarty->assign('subcategories', $subCategories);

 /** Ajout de l'affichage des catégories enfants **/
	   self::$smarty->assign('category', $this->category);
	    foreach ($subCategories AS $subcat)
	    {
		    $child = new Category((int)($subcat['id_category']), (int)self::$cookie->id_lang);
		    $children = $child->getSubCategories((int)self::$cookie->id_lang);
		    $result[] = array('id_category'=> $subcat['id_category'],
					 'name'=> $subcat['name'] ,
					 'id_image'=> $subcat['id_image'],
					 'legend'=> $subcat['legend'] ,
					 'children'=> $children);
	    }

	    //if (Db::getInstance()->numRows())
		   self::$smarty->assign('subcategories',$result);
   /** Ajout de l'affichage des catégories enfants **/



 self::$smarty->assign(array(
  'subcategories_nb_total' => sizeof($subCategories),
  'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));
   }

 

 

Dans category.tpl (juste après le code description des catégories)

{foreach from=$subcategory.children item=child name=children}
    <a href="{$link->getCategoryLink($child.id_category, $child.link_rewrite)|escape:'htmlall':'UTF-8'}" id="{$child.id_category}">
    {$child.name|escape:'htmlall':'UTF-8'}
    </a>

    {if $child.id_image}
    <img id="image" src="{$link->getCatImageLink($child.link_rewrite, $child.id_image)}" alt="" />
    </div>
    {/if}

    {if $smarty.foreach.children.last}{else}<br/>{/if}
   {/foreach}

 

 

Chez moi ça fonctionne :-)

 

Mais bon ce n'est pas top car il faut changer le coeur de prestashop, ce qui serait mieux ce serait de le faire sous forme de module (même pas forcément avec un accès BO mais pour que ce soit juste à part), mais là je ne sais pas faire, j'ai fait un slide en jquerry sous forme de module mais là avec le php je ne sais pas comment ça fonctionne et comment faire pour l'inclure dans la partie CategorieController.php.

 

Maintenant je cherche à changer mes images, là non plus je ne suis pas au bout de mes peines...

  • Like 1
Link to comment
Share on other sites

Bonjour,

 

On ne fait que ça d'aider les gens^^ Il y a tellement de topics (parfois abusés d'ailleurs). Bref.

 

Bien joué pour avoir trouvé et merci pour le partage qui pourra servir à quelqu'un d'autre ;)

 

Pour votre préoccupation de ne pas modifier le cœur, sachez qu'il y a une solution simple à cela : l'override !

 

La modification faite dans le CategoryController.php est à déplacée dans le dossier /override/controllers/CategoryController.php.

Voici le schéma à suivre à l'intérieur :

 

<?php

class CategoryController extends CategoryControllerCore
{
 // Ici, votre méthode modifiée (complète)
}
?>

 

Pour les modifs du thème pas de soucis, c'est le votre. Et voila, le tour est joué ! Vous pourrez continuer à mettre à jour votre PS sans trop de soucis par la suite ;)

 

Bonne continuation !

Link to comment
Share on other sites

Bonjour,

 

Oui je me doute bien, j'essaye aussi de participer aux réponses auxquelles je peux répondre. Mais là en 15 jours, une seule réponse, il y a de quoi être déçue quand même.

 

Merci pour l'astuce, je vais tester ça, ça sera top comme ça je n'aurais pas de soucis à me faire de ce côté là.

 

Je pense qu'on pourrait encore améliorer mais je ne suis pas une pro, en tout cas ça peut-être bien pratique et j'espère que ça servira à d'autres pour personnaliser au maximum leur boutique.

 

Bonne journée et merci,

 

Madeline

Link to comment
Share on other sites

Salut madeline67 dsl j'ai abandonné ce post depuis plusieurs jours néanmoin si tu as d'autres problème sur presta ou des modifs pour te remercier d'avoir participé sur ce post je te propose mon aide et de partager. je ne prétent pas tout savoir mais le peu que je puisse avoir je le partagerais.

 

Et je vais tester ta soluce, car on m'avais dis qu'il était mieux de créer un module pour créer une nouvelle pages.

 

 

Et encore merci !

  • Like 1
Link to comment
Share on other sites

Salut bad ****** f***** merci c'est sympa :)

 

Merci aussi à Dev On Web, j'ai fait comme tu as expliqué et ça marche nikel, je suis ravie :D

 

bad****** f***** tu as essayé cette méthode ?

 

Sous forme de module tu peux créer un nouveau hook dans le fichier category.tpl, {HOOK_CHILDREN} (par exemple), et y greffer ton module où tu créer un fichier .tpl contenant la boucle foreach permettant d'afficher le contenu du tableau et créer un fichier .php avec la fonction qui crée les subcategory.children.

 

Dans la doc de prestashop il y a les démarches à réaliser pour la création d'un nouveau module, c'est comme ça que j'ai fait pour intégrer un caroussel sur ma page d'accueil :

http://doc.prestashop.com/pages/viewpage.action?pageId=3801216

 

Et pour créer un nouveau Hook rien de plus simple :

http://www.devoox.com/prestashop-ajouter-un-hook-dans-une-boutique-prestashop-1-4.html

 

Tiens nous au courant de ton avancée comme ça on pourra t'aider si tu as des soucis ^_^

Link to comment
Share on other sites

Merci madeline67 mais comme sur un autre post il semble plus facile de créer une simple nouvelle page et d'y intégrer les fonctions, en gros c'est une pages pour catégories parents avec en liste les sous catégories, je pourrais éventuellement faire une boucle if et tester les id parents dans le fichier category.tpl.

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