exootia Posted May 6, 2014 Share Posted May 6, 2014 Bonjour à tous, Je cherche à lister la liste de toutes les catégories du même niveau que la catégorie en cours. Je m'explique. Disons que j'ai les catégories suivantes :cat parent 1 : - cat enfant 1.1 - cat enfant 1.2 - cat enfant 1.3 cat parent 2 : - cat enfant 2.1 - cat enfant 2.2 Disons que je suis dans la cagégorie cat enfant 1.2, je souhaite lister tous les frères de cette catégorie (donc : cat enfant 1.1, cat enfant 1.2 et cat enfant 1.3).Je ne trouve pas comment faire ça simplement. Quelqu'un aurait une solution ? Link to comment Share on other sites More sharing options...
exootia Posted May 8, 2014 Author Share Posted May 8, 2014 personne ? Link to comment Share on other sites More sharing options...
AC2ID Posted May 8, 2014 Share Posted May 8, 2014 Bonjour, Chaque catégorie, sous-catégorie, etc. ont l'identifiant de leur catégorie parente (id_parent). Il vous suffit de récupérer cet identifiant de la catégorie souhaitez et de recherche les autres catégorie ayant le même identifiant. Cdt Link to comment Share on other sites More sharing options...
exootia Posted May 9, 2014 Author Share Posted May 9, 2014 Je récupères bien l'id de la catégorie parent, mais je ne vois pas comment lister toutes les catégories qui en découlent. Tu pourras me donner une solution si possible ? Merci d'avance Link to comment Share on other sites More sharing options...
AC2ID Posted May 11, 2014 Share Posted May 11, 2014 Il faudrait que tu précise ton contexte de travail (contrôleur, classe, vue tpl, etc.), car des solutions il y a en plein, mais qui ne correspondront pas peut-être à ce que tu veux faire. Cdt Link to comment Share on other sites More sharing options...
exootia Posted May 12, 2014 Author Share Posted May 12, 2014 Je souhaites réalisé ça dans product-list.tpl. Je pensais que ce serait jouable avec un foreach en récupérant les variables smarty non ?Pour tout ce qui est lié aux controllers etc, je ne sais pas vraiment, c'est le premier site que je fais sous prestashop Du coup ce que je souhaiterai, c'est que quand je suis dans la liste des produits d'une sous catégorie (exemple cat enfant 1.2, pour reprendre mon premier exemple) j'ai la liste des autres catégories du même niveau (cat enfant 1.1, cat enfant 1.2 et cat enfant 1.3) Link to comment Share on other sites More sharing options...
AC2ID Posted May 13, 2014 Share Posted May 13, 2014 Ok, je comprend mieux. En fait, il faut que tu utilise la variable smarty $subcategories (ligne 76 environ) de category.tpl (product-list.tpl étant inclut dans category.tpl ). Après je pense que tu pourra faire aisément faire ce que tu souhaite avec un foreach et un petit if. Link to comment Share on other sites More sharing options...
exootia Posted May 15, 2014 Author Share Posted May 15, 2014 C'est exactement ce que j'essaie de faire, mais je n'y arrive pas Link to comment Share on other sites More sharing options...
AC2ID Posted May 17, 2014 Share Posted May 17, 2014 Excuse moi, je me suis planté. En fait c'est normal que tu n'y arriva pas car la variable $subcatgorie contient les sous catégories de la catégorie en cour, il n'est donc pas possible de récupérer les catégories frères et je ne crois pas qu'il y ai des variables smarty natives pour le faire. Le seul moyen est de créer une nouvelle variable smarty en apportant une modification au niveau du contrôleur des catégories avec une override. J'essaye de regarder cela et je reviens vers toi. cdt Link to comment Share on other sites More sharing options...
AC2ID Posted May 18, 2014 Share Posted May 18, 2014 Bonjour exootia, Voici la solution avec un override du contrôleur. L'opération consiste à "redéfinir "la fonction initContent() du contrôleur CategoryController.php en lui ajoutant une variable smarty qui te permettra d'extrait les catégories soeurs s'il y en a. La ligne à rajouter est la suivante : 'category_sisters' => CategoryCore::getChildren((int)$this->category->id_parent, $this->context->language->id) Attention la modification ne doit pas se faire dans le contrôleur situé dans le répertoire controllers/front/ , mais dans le répertoire override/controllers/front/. Pour commencer : créer un fichier CategoryController.php dans le répertoire override/controllers/front/ de ton prestashop et complète le avec le code ci-dessous et enregistre le. <?php class CategoryController extends CategoryControllerCore { public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'category.tpl'); if (!$this->customer_access) return; if (isset($this->context->cookie->id_compare)) $this->context->smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)$this->context->cookie->id_compare)); $this->productSort(); // Product sort must be called before assignProductList() $this->assignScenes(); $this->assignSubcategories(); if (!in_array($this->category->id, array(Configuration::get('PS_HOME_CATEGORY'), Configuration::get('PS_ROOT_CATEGORY')))) $this->assignProductList(); $this->context->smarty->assign(array( 'category' => $this->category, 'description_short' => Tools::truncateString($this->category->description), 'products' => (isset($this->cat_products) && $this->cat_products) ? $this->cat_products : null, 'id_category' => (int)$this->category->id, 'id_category_parent' => (int)$this->category->id_parent, 'return_category_name' => Tools::safeOutput($this->category->name), 'path' => Tools::getPath($this->category->id), 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'categorySize' => Image::getSize(ImageType::getFormatedName('category')), 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')), 'thumbSceneSize' => Image::getSize(ImageType::getFormatedName('m_scene')), 'homeSize' => Image::getSize(ImageType::getFormatedName('home')), 'allow_oosp' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'), 'comparator_max_item' => (int)Configuration::get('PS_COMPARATOR_MAX_ITEM'), 'suppliers' => Supplier::getSuppliers(), 'category_sisters' => CategoryCore::getChildren((int)$this->category->id_parent, $this->context->language->id) )); } } Ensuite, il faut que tu supprime le fichier class_index.php du répertoire cache/ pour que l'override soit pris en compte (il sera régénérer automatiquement par prestsahop). Et il ne te reste plus qu'à générer l'affichage que tu souhait dans ton fichier product-list.tpl ou category.tpl avec un foreach, if, etc., avec la nouvelle variable smarty crée : $category_sisters Pour info, j'ai fait le test sur une version 1.5.6.2, donc il est possible que le code de la fonction initContent() varie un peu selon ta version (prend le temps de vérifier avant et de rajouter la ligne par rapport au code de ta version). @+ Link to comment Share on other sites More sharing options...
Sébastien L Posted June 17, 2014 Share Posted June 17, 2014 Bonjour exootia, Voici la solution avec un override du contrôleur. L'opération consiste à "redéfinir "la fonction initContent() du contrôleur CategoryController.php en lui ajoutant une variable smarty qui te permettra d'extrait les catégories soeurs s'il y en a. La ligne à rajouter est la suivante : 'category_sisters' => CategoryCore::getChildren((int)$this->category->id_parent, $this->context->language->id) Attention la modification ne doit pas se faire dans le contrôleur situé dans le répertoire controllers/front/ , mais dans le répertoire override/controllers/front/. Pour commencer : créer un fichier CategoryController.php dans le répertoire override/controllers/front/ de ton prestashop et complète le avec le code ci-dessous et enregistre le. <?php class CategoryController extends CategoryControllerCore { public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'category.tpl'); if (!$this->customer_access) return; if (isset($this->context->cookie->id_compare)) $this->context->smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)$this->context->cookie->id_compare)); $this->productSort(); // Product sort must be called before assignProductList() $this->assignScenes(); $this->assignSubcategories(); if (!in_array($this->category->id, array(Configuration::get('PS_HOME_CATEGORY'), Configuration::get('PS_ROOT_CATEGORY')))) $this->assignProductList(); $this->context->smarty->assign(array( 'category' => $this->category, 'description_short' => Tools::truncateString($this->category->description), 'products' => (isset($this->cat_products) && $this->cat_products) ? $this->cat_products : null, 'id_category' => (int)$this->category->id, 'id_category_parent' => (int)$this->category->id_parent, 'return_category_name' => Tools::safeOutput($this->category->name), 'path' => Tools::getPath($this->category->id), 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'categorySize' => Image::getSize(ImageType::getFormatedName('category')), 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')), 'thumbSceneSize' => Image::getSize(ImageType::getFormatedName('m_scene')), 'homeSize' => Image::getSize(ImageType::getFormatedName('home')), 'allow_oosp' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'), 'comparator_max_item' => (int)Configuration::get('PS_COMPARATOR_MAX_ITEM'), 'suppliers' => Supplier::getSuppliers(), 'category_sisters' => CategoryCore::getChildren((int)$this->category->id_parent, $this->context->language->id) )); } } Ensuite, il faut que tu supprime le fichier class_index.php du répertoire cache/ pour que l'override soit pris en compte (il sera régénérer automatiquement par prestsahop). Et il ne te reste plus qu'à générer l'affichage que tu souhait dans ton fichier product-list.tpl ou category.tpl avec un foreach, if, etc., avec la nouvelle variable smarty crée : $category_sisters Pour info, j'ai fait le test sur une version 1.5.6.2, donc il est possible que le code de la fonction initContent() varie un peu selon ta version (prend le temps de vérifier avant et de rajouter la ligne par rapport au code de ta version). @+ Bonjour Merci pour la solution proposée afin de faire apparaitre les catégories soeur. Mais comment utiliser concrêtement $category_sisters avec un foreach ? Merci par avance pour vos éclaircissements. Link to comment Share on other sites More sharing options...
AC2ID Posted June 18, 2014 Share Posted June 18, 2014 Bonjour, Oui avec un foreach dans le fichier product-list.tpl ou category.tpl. La variable smarty $category_sisters est un tableau associatif contenant les informations de chacune des catégories soeurs (id_category, id_category_parent, etc.) Chaque Item qui sera extrait par le foreach permettra l'accès aux informations. Un petit exemple pour affiche le(s) nom(s) des catégories soeurs (si existante(s)) <ul> {foreach from=$category_sisters item=category} <li>{$category.name}</li> {/foreach} </ul> Petite astuce pour connaitre le contenu de la variable $category_sisters, faire dans un des fichiers .tpl : {var_dump($category_sisters)} Cela affichera le contenu de la variable lors de l'appel de la page. Attention: ne pas conserver cette ligne dans votre tpl et penser à la supprimer dès que vous avez trouver les informations souhaitées. Cdt Link to comment Share on other sites More sharing options...
Sébastien L Posted June 29, 2014 Share Posted June 29, 2014 Bonjour, Oui avec un foreach dans le fichier product-list.tpl ou category.tpl. La variable smarty $category_sisters est un tableau associatif contenant les informations de chacune des catégories soeurs (id_category, id_category_parent, etc.) Chaque Item qui sera extrait par le foreach permettra l'accès aux informations. Un petit exemple pour affiche le(s) nom(s) des catégories soeurs (si existante(s)) <ul> {foreach from=$category_sisters item=category} <li>{$category.name}</li> {/foreach} </ul> Petite astuce pour connaitre le contenu de la variable $category_sisters, faire dans un des fichiers .tpl : {var_dump($category_sisters)} Cela affichera le contenu de la variable lors de l'appel de la page. Attention: ne pas conserver cette ligne dans votre tpl et penser à la supprimer dès que vous avez trouver les informations souhaitées. Cdt Bonjour Crokeco, Je te remercie pour ton retour. Ca fonctionne effectivement avec ton code. Je m'étais planté bêtement dans mon foreach... Pour ceux que cela intéresse voici le code qui permet d'afficher les catégories soeurs avec les liens : <ul> {foreach from=$category_sisters item=category} <li><a href="{$link->getCategoryLink($category.id_category, $category.link_rewrite)}" class="cat_name"><span>{$category.name}</span></a></li> {/foreach} </ul> Cdlt 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