julesfromparis Posted October 27, 2014 Share Posted October 27, 2014 (edited) Bonjour, Je souhaite créer deux différentes templates de page produit selon le produit / ou la catégorie de produit. Auriez-vous une idées ? Merci. Jules Edited October 30, 2014 by julesfromparis (see edit history) Link to comment Share on other sites More sharing options...
julesfromparis Posted October 28, 2014 Author Share Posted October 28, 2014 C'est un sujet que l'on voit un peu partout, mais sans vrai réponse … Quelqu'un aurait une idée ? Merci Link to comment Share on other sites More sharing options...
herve25 Posted October 29, 2014 Share Posted October 29, 2014 Bonjour, Voici une solution qui permet d'afficher un template spécifique en fonction de l'identifiant du produit.Pour cela il faut surcharger la fonction initContent du controller ProductController /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); //Si un template spécifique existe pour ce produit on l'utilise if ( file_exists(_PS_THEME_DIR_.'product-'.$this->product->id.'.tpl') ) { $this->setTemplate(_PS_THEME_DIR_.'product'.$this->product->id.'.tpl'); } else $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); } Par exemple si pour le produit identifiant 1, un template "product-1.tpl" existe il sera utilisé à la place du template standard.( Tu peux également utiliser la référence du produit si nécessaire ) 1 Link to comment Share on other sites More sharing options...
julesfromparis Posted October 29, 2014 Author Share Posted October 29, 2014 Bonjour Herve25, Merci beaucoup pour ta réponse ! Est-il possible de faire cela avec une catégorie de produit ? Jules Link to comment Share on other sites More sharing options...
herve25 Posted October 29, 2014 Share Posted October 29, 2014 C'est faisable sur le même principe en se basant sur la catégorie par défaut du produit. /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); //Template spécifique pour le produit if ( file_exists(_PS_THEME_DIR_.'product'.$this->product->id_category_default.'.tpl') ) { $this->setTemplate(_PS_THEME_DIR_.'product'.$this->product->id_category_default.'.tpl'); } else $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); } Par contre pour si tu veux le faire en fonction du contexte cela risque d’être un peu plus complexe. Link to comment Share on other sites More sharing options...
julesfromparis Posted October 29, 2014 Author Share Posted October 29, 2014 (edited) Merci Herve ! Ou dois je mettre l'ID de la catégorie ? Par contre pour si tu veux le faire en fonction du contexte cela risque d’être un peu plus complexe. C'est à dire ? Je souhaite juste que pour la catégorie produit > ma template standard de page produit puis pour une catégorie Pack > une template spécifique. Edited October 29, 2014 by julesfromparis (see edit history) Link to comment Share on other sites More sharing options...
julesfromparis Posted October 29, 2014 Author Share Posted October 29, 2014 (edited) J'ai testé ceci, mais sans résultats $this->context->smarty->assign('errors', $this->errors); if ($this->category->id==7){ $this->setTemplate(_PS_THEME_DIR_.'product_pack.tpl'); // template file for caregory id: 5 } else { $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); // DEFAULT template } Edited October 29, 2014 by julesfromparis (see edit history) Link to comment Share on other sites More sharing options...
julesfromparis Posted October 29, 2014 Author Share Posted October 29, 2014 Effectivement, il y a un tuto ici Mais je ne comprends pas ou on place l'ID de la catégorie… class ProductController extends ProductControllerCore { public function initContent() { parent::initContent(); /* Teste si le fichier existe ou non, sinon c'est le fichier par défaut qui est affiché */ if (is_file(_PS_THEME_DIR_.'product_'. $this->product->id_category_default .'.tpl')) { $this->setTemplate(_PS_THEME_DIR_.'product_'. $this->product->id_category_default .'.tpl'); } else { $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); } } } Link to comment Share on other sites More sharing options...
julesfromparis Posted October 30, 2014 Author Share Posted October 30, 2014 (edited) Bonjour, Ça marche enfin… Merci à Herve25 pour son aide. Voici comment procéder : 1 // Dans productcontroller (Overide) 2 // Ligne 177 : Remplacer par public function initContent() { parent::initContent(); //Template spécifique pour le produit if ( file_exists(_PS_THEME_DIR_.'product_'.$this->product->id_category_default.'.tpl') ) { $this->setTemplate(_PS_THEME_DIR_.'product_'.$this->product->id_category_default.'.tpl'); } else $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); 3 // Ligne 292 Supprimer le code (Si non ça ne marche pas) : $this->setTemplate(_PS_THEME_DIR_.'product.tpl'); 4 // Créer une template avec product_7.tpl Cette template s'affichera pour les produits dont la catégorie est l'ID 7. Jules Edited October 30, 2014 by julesfromparis (see edit history) 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