PHP

Surcharger Prestashop

Depuis la version 1.4 de Prestashop, il est possible de surcharger proprement le core de Prestashop. Auparavant, ne serait-ce que pour l’ajout d’un hook, la modification du core était nécessaire et à la moindre mise à jour de Prestashop, les choses devenaient contraignantes…
J’ai donc décidé de vous présenter la méthode de surcharge qui vous évitera quelques soucis lors de la prochaine mise à jour de l’outil.

A la racine du site se trouve un dossier override qui lui même contient deux dossiers, classes et controllers.
Comme ces noms l’indiquent, le dossier classes contiendra les classes surchargées et le dossier controllers, les controllers.

Nous allons par exemple ci-dessous surcharger la class FrontController.php
Attention : ce controller a la particularité d’être surchargé dans le dossier classes

 

<?php
/* Créez ce fichier à l'emplacement suivant
  * override/classes/FrontController.php
*/
class FrontController extends FrontControllerCore{

  public function displayHeader(){
        global $css_files, $js_files;

        if (!self::$initialized)
        $this->init();

        // P3P Policies (http://www.w3.org/TR/2002/REC-P3P-20020416/#compact_policies)
        header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

        /* Hooks are volontary out the initialize array (need those variables already assigned) */
        self::$smarty->assign(array(
        'time' => time(),
        'static_token' => Tools::getToken(false),
        'token' => Tools::getToken(),
        'logo_image_width' => Configuration::get('SHOP_LOGO_WIDTH'),
        'logo_image_height' => Configuration::get('SHOP_LOGO_HEIGHT'),
        'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_,
        'content_only' => (int)(Tools::getValue('content_only'))
        ));
        self::$smarty->assign(array(
          'HOOK_LEFT_FEATURES' => Module::hookExec('leftFeatures'),
          'HOOK_FEATURES'    => Module::hookExec('features'),
          'HOOK_FEATURED'    => Module::hookExec('homeFeatured'),
          'HOOK_CORNER'      => Module::hookExec('cornerHome'),
          'HOOK_TOPNAV'      => Module::hookExec('topNav'),
          'HOOK_MIDDLENAV'   => Module::hookExec('middleNav'),
          'HOOK_MAINNAV'     => Module::hookExec('mainNav'),
          'HOOK_HOMETEXT'    => Module::hookExec('homeText'),
          'HOOK_HEADER'      => Module::hookExec('header'),
          'HOOK_TOP'         => Module::hookExec('top'),
          'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
          'HOOK_LOF_TOP'     => Module::hookExec('lofTop')
        ));

        if ((Configuration::get('PS_CSS_THEME_CACHE') OR Configuration::get('PS_JS_THEME_CACHE')) AND is_writable(_PS_THEME_DIR_.'cache'))
        {
        // CSS compressor management
        if (Configuration::get('PS_CSS_THEME_CACHE'))
        Tools::cccCss();

        //JS compressor management
        if (Configuration::get('PS_JS_THEME_CACHE'))
        Tools::cccJs();
        }

        self::$smarty->assign('css_files', $css_files);
        self::$smarty->assign('js_files', array_unique($js_files));
        self::$smarty->display(_PS_THEME_DIR_.'header.tpl');
    }

}
?>

Nous avons donc surchargé ci-dessus la méthode displayHeader() pour charger de nouveaux hooks (HOOK_CORNER, HOOK_MAINNAV…).

Et voilà ! Votre surcharge sera prise en compte par Prestashop.

Fin des mises à jours périlleuses !

Previous Post

You Might Also Like

No Comments

Leave a Reply