mexique1 Posted February 3, 2012 Share Posted February 3, 2012 Salut, J'ai fait en quelque sorte un "rétro-portage" des layouts de PrestaShop 1.5. Pour rappel, un layout permet de définir la mise en page du site dans un seul et unique fichier, au lieu de séparer en header.tpl, content.tpl et footer.tpl. Celà permet notamment d'éviter d'ouvrir une balise dans un fichier et de la fermer dans un autre, et d'avoir un vision globale de la mise en page. Tout celà se présente sous la forme d'un override de la classe FrontControllerCore, qui intercepte le rendu des templates via la temporisation de sortie, et l'injecte dans un seul fichier, layout.tpl. <?php /** * FrontController override with layout support. * * @category override/classes * @copyright Copyright (c) 2011-2012 Alexandre Segura <[email protected]> * @author Alexandre Segura <[email protected]> */ class FrontController extends FrontControllerCore { public function run() { // Add a layout.tpl file to your theme dir to trigger layout support if (file_exists(_PS_THEME_DIR_ . 'layout.tpl')) { ob_start(); $this->init(); $this->preProcess(); $this->displayHeader(); $header = ob_get_contents(); ob_clean(); $this->process(); $this->displayContent(); $content = ob_get_contents(); ob_clean(); $this->displayFooter(); $footer = ob_get_contents(); ob_clean(); ob_end_clean(); self :: $smarty->assign(array( 'LAYOUT_HEADER' => $header, 'LAYOUT_CONTENT' => $content, 'LAYOUT_FOOTER' => $footer )); $pageName = self :: $smarty->get_template_vars('page_name'); $defaultLayoutName = 'layout'; $pageLayoutName = $defaultLayoutName . '-' . $pageName; $layoutName = $defaultLayoutName; if (file_exists(_PS_THEME_DIR_ . $pageLayoutName . '.tpl')) { $layoutName = $pageLayoutName; } return self :: $smarty->display(_PS_THEME_DIR_ . $layoutName . '.tpl'); } parent :: run(); } } Il suffit donc de créer un fichier layout.tpl contenant le code suivant pour un support immédiat. {$LAYOUT_HEADER} {$LAYOUT_CONTENT} {$LAYOUT_FOOTER} Pour une utilisation plus avancée, il faut mieux découper les templates, en extrayant par exemple le contenu de la balise <head> dans un fichier séparé, etc... Les mises à jour seront publiées sur le GitHub de Oops, dans ma signature. Link to comment Share on other sites More sharing options...
mexique1 Posted April 16, 2012 Author Share Posted April 16, 2012 Pour info ça a été ajouté dans PrestaShop 1.5, avec plus ou moins le même mécanisme /** * Returns the layout corresponding to the current page by using the override system * Ex: * On the url: http://localhost/index.php?id_product=1&controller=product, this method will * check if the layout exists in the following files (in that order), and return the first found: * - /themes/default/override/layout-product-1.tpl * - /themes/default/override/layout-product.tpl * - /themes/default/layout.tpl * * @since 1.5 * @return bool|string */ public function getLayout() { } 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