ChDUP Posted October 21, 2012 Share Posted October 21, 2012 bonjour à tous. Je dois sur un site faire une page d'accueil totalement différente du reste du site. Dans l'idéal j'aimerai pouvoir y appliquer un layout/template specifique à cette page. l'override permet maintenant ce genre de chose, pour un produit ou une catégorie specifique, mais je n'ai pas réussi à l'appliquer à l'index (pas possible ?) http://www.prestashop.com/forums/topic/168197-override-layout-template/ j'aimerai eviter de conserver le layout des autres pages en y ajoutant à chaque éléments des {if $page_name != 'index'} ce qui ne me paraitrait pas optimum dans ce cas. Une piste serait de surcharger un controleur pour le faire appeler un autre layout si $page_name == 'index'. Cela pourrait-il marcher ? Sur quel controleur dois-je me pencher ? une solution meilleure ? merci ! Link to comment Share on other sites More sharing options...
J. Danse Posted October 21, 2012 Share Posted October 21, 2012 Il est possible de mettre un module accroché sur le hool "actionDispastcher" qui change le template selon le controller actif (IndexController, dans ce cas). Link to comment Share on other sites More sharing options...
ChDUP Posted October 21, 2012 Author Share Posted October 21, 2012 donc tu me conseillerais de créer un module, que j'accroche sur ce hook "actionDispatcher" que je ne connaissais pas. ça OK et l'action de ce module serait de changer le controller si $page_name =="index" ça par contre, ça risque de ne pas être de mon niveau Link to comment Share on other sites More sharing options...
J. Danse Posted October 21, 2012 Share Posted October 21, 2012 Ce hook est nouveau, en 1.5. Pour l'utiliser, il faut inclure dans un module le code suivant: (dans la fonction du hook même) if($params['controller'] == 'IndexController') //code à écrire Link to comment Share on other sites More sharing options...
Prestadget Posted October 21, 2012 Share Posted October 21, 2012 C'est pas le rôle de la nouvelle fonction getLayout() dispo since 1.5 justement ? Tu peux la trouver dans FrontController.php ligne 1070 Link to comment Share on other sites More sharing options...
ChDUP Posted November 4, 2012 Author Share Posted November 4, 2012 J'essaie de me pencher sur ce problème. Dans l'idéee, je surcharge FrontController.php et cette fameuse fonction getLayout() comme ceci : public function getLayout() { if (/* PAGE COURANTE = HOME*/) { $entity = 'home'; } else { $entity = Tools::getValue('controller'); } $id_item = (int)Tools::getValue('id_'.$entity); $layout_dir = _PS_THEME_DIR_; $layout_override_dir = _PS_THEME_OVERRIDE_DIR_; if ($this->context->getMobileDevice() != false) { $layout_dir = _PS_THEME_MOBILE_DIR_; $layout_override_dir = _PS_THEME_MOBILE_OVERRIDE_DIR_; } $layout = false; if ($entity) { if ($id_item > 0 && file_exists($layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'-'.$id_item.'.tpl'; elseif (file_exists($layout_override_dir.'layout-'.$entity.'.tpl')) $layout = $layout_override_dir.'layout-'.$entity.'.tpl'; } if (!$layout && file_exists($layout_dir.'layout.tpl')) $layout = $layout_dir.'layout.tpl'; return $layout; } J'ai bon ? Mon problème est de savoir comment tester si PAGE COURANTE = HOME ? Link to comment Share on other sites More sharing options...
ChDUP Posted November 5, 2012 Author Share Posted November 5, 2012 en fait si j'utilise if ($page == 'index.php') toutes les pages appellent layout-home.tpl puisque toutes les pages ont pour URL index.php?XXXX Je me demande si il n'est pas plus simple finalement dans layout.tpl d'appeler différents templates suivant {$page_name} ? 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