Jump to content

[OVERRIDE] Support des layouts dans PrestaShop 1.4.x


mexique1

Recommended Posts

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

  • 2 months later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...