OhMyWatch! Posted March 8, 2017 Share Posted March 8, 2017 (edited) Bonjour tout le monde Je cherche à faire quelque chose et je ne sais pas si c'est possible.En gros chaque page catégorie de mon site a toujours exactement la même structure (comme tous les sites prestashop).J'ai dans mon site plusieurs catégories et j'aimerais partir à chaque fois de quelque chose de vierge et y mettre ce que je veux. Je pensais par exemple dans le categorie.tpl, mettre quelque chose comme "si id category=xxx alors code xxx, si id category=yyy alors code yyy".Ca me semble un peu bourrin et je me demande si le mieux ne serait pas de créer plusieurs fichiers tpl. Mais dans ce cas, comment les appeler en fonction de l'id category.Merci beaucoup pour votre aide, je suis seul sur mon projet, je galère un peu et mettre en place cela me tenait beaucoup à coeur.Merci encore Edited March 10, 2017 by OhMyWatch! (see edit history) Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 8, 2017 Author Share Posted March 8, 2017 up Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 9, 2017 Author Share Posted March 9, 2017 personne ? Link to comment Share on other sites More sharing options...
BeComWeb Posted March 9, 2017 Share Posted March 9, 2017 Tu as effectivement la possibilité de jouer avec des conditions Smarty dans category.tpl et/ou product-list.tpl pour gérer des affichages différents selon la catégorie. Ou sinon tu modifies le CategoryController.php (en override bien sûr) pour attribuer des templates différents en fonction de la catégorie. Dans ce cas il faut que tu regardes du côté de la fonction initContent(). Avec des conditions du style if($this->category->id === xxx){ $this->setTemplate(_PS_THEME_DIR_.'category_xxx.tpl'); } else{ $this->setTemplate(_PS_THEME_DIR_.'category.tpl'); } Tu pourras indiquer quel template utilisé en fonction de la catégorie. Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 9, 2017 Author Share Posted March 9, 2017 Ok merci beaucoup ! je suis loin d'être un expert donc pour être sûr de ne pas faire de betises, dis moi si j'ai bien compris : - je crée 2 fichiers tpl dans le dossier du thème : xx.tpl yy.tpl. Avec par exemple xx pour la catégorie 1 et yy pour la catégorie 2 - et dans CategoryController.php j'écris : if($this->category->id === 1){$this->setTemplate(_PS_THEME_DIR_.'xx.tpl');}else{$this->setTemplate(_PS_THEME_DIR_.'yy.tpl');} C'est bien ça ? Par contre pas trop compris l'histoire de l'ovveride... Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 9, 2017 Author Share Posted March 9, 2017 Alors j'ai créé dans le dossier override/controllers/front, un fichier CategoryController.php.Dedans j'ai mis le code : <?php public function initContent() if($this->category->id === 14){ $this->setTemplate(_PS_THEME_DIR_.'pop.tpl'); } if($this->category->id === 64){ $this->setTemplate(_PS_THEME_DIR_.'elegance.tpl'); } ?> Pourtant rien ne se passe... Tu saurais me dire d'où vient l'erreur ? Merci beaucoup pour ton aide Link to comment Share on other sites More sharing options...
BeComWeb Posted March 9, 2017 Share Posted March 9, 2017 Tu dois aller supprimer le fichier class_index.php qui est dans le répertoire "cache" (ou le renommer si tu n'es pas sûr de toi). Par contre ton code n'est pas bon du tout !!! Il manque beaucoup de choses. Link to comment Share on other sites More sharing options...
BeComWeb Posted March 9, 2017 Share Posted March 9, 2017 Ton fichier devrait plutôt ressembler à quelque chose comme ça <?php class CategoryController extends CategoryControllerCore { public function initContent() { parent::initContent(); if($this->category->id === 1){ $this->setTemplate(_PS_THEME_DIR_.'category_1.tpl'); } elseif($this->category->id === 2){ $this->setTemplate(_PS_THEME_DIR_.'category_2.tpl'); } else{ $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)); } // Product sort must be called before assignProductList() $this->productSort(); $this->assignScenes(); $this->assignSubcategories(); $this->assignProductList(); $this->context->smarty->assign(array( 'category' => $this->category, 'description_short' => Tools::truncateString($this->category->description, 350), '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(), 'body_classes' => array($this->php_self.'-'.$this->category->id, $this->php_self.'-'.$this->category->link_rewrite) )); } } ?> Attention ! C'est un 1er jet, je n'ai pas testé donc je ne t'assure pas qu'il n'y aura pas de bug ou d'effets de bords. C'est pour te mettre sur la voie. Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 9, 2017 Author Share Posted March 9, 2017 Merci beaucoup pour ta réponse, mais je suis loin d'être un expert et je n'aurais pas été capable de modifier le code pour qu'il fonctionne. J'ai néanmoins trouvé une solution, peut-être bourrine, certes, mais dans category.tpl j'ai mis : {include file="$tpl_dir./errors.tpl"} {if ($id_category == XX) } {include file="$tpl_dir./XX.tpl"} {elseif ($id_category == YY) } {include file="$tpl_dir./YY.tpl"} {else} {include file="$tpl_dir./category2.tpl"} {/if} Du coup si la catégorie est XX on charge le fichier XX si c'est YY on charge YY sinon, on charge le tpl normal. Du coup j'ai créé un category2.tpl avec le code du tpl normal.Et ça marche. Merci encore d'avoir pris le temps de me répondre Link to comment Share on other sites More sharing options...
BeComWeb Posted March 9, 2017 Share Posted March 9, 2017 Oui, des conditions Smarty, j'avais aussi mentionné cette solution Link to comment Share on other sites More sharing options...
OhMyWatch! Posted March 9, 2017 Author Share Posted March 9, 2017 Merci encore 1 Link to comment Share on other sites More sharing options...
BeComWeb Posted March 9, 2017 Share Posted March 9, 2017 De rien, pense à passer le topic sur "[Résolu]" 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