Lorsque l’on souhaite modifier un comportement ou une fonctionnalité native de Prestashop, il peut sembler évident, au premier abord, d’aller changer directement le code de la classe ou du controller utilisé par la page en question, grave erreur ! Depuis plusieurs années déjà, depuis la version 1.4 de Prestashop il est possible de passer par l’override. Mais qu’est-ce donc ?!

Qu’est ce que l’override ?

Si nous souhaitions simplement traduire ce mot, nous pourrions dire qu’il signifie « passer outre » ou informatiquement parlant « forcer« . Il s’agit donc d’outrepasser une fonctionnalité ou un comportement de Prestashop par défaut en définissant un nouveau comportement, ailleurs dans un autre emplacement, qui sera utilisé par le système, forcé de ne plus tenir compte du comportement originel.

A priori la manœuvre est donc plus contraignante que de modifier directement les fichiers du cœur de Prestashop, certes mais le jeu en vaut la chandelle. L’idée est de s’enquiquiner un peu au départ pour être tranquille à l’avenir et le développement informatique est basé sur ce principe.

Imaginez que vous ayez modifié le comportement de Prestashop au niveau des produits, des catégories et des pages de CMS. Puis un beau jour, sans faire attention, vous faites une mise à jour de Prestashop et vous passez à la nouvelle version, en un clic ! Manque de bol, cette nouvelle version a mis à jour les fichiers sur lesquels vous aviez appliqué vos modifications et vous avez tout perdu, lorsque vous accédez à la boutique plus rien n’est comme avant. L’intérêt de l’override réside ici, malgré une mise à jour vous conserverez vos modifications car les fichiers du dossier /override ne seront jamais écrasés automatiquement par le système.

Petit bémol toutefois, et je vous parle en tant que développeur, si la nouvelle version des fonctionnalités que vous avez modifiées est très différente de la précédente (ce qui peut arriver lors d’un changement important de version, 1.4 vers 1.6 par exemple), vous serez amenez à revoir votre override pour reprendre le nouveau comportement en y appliquant vos propres modifications. Un outil utile dans ces cas-là Winmerge.

Prenons un exemple plus précis d’override

Si vous m’avez bien suivi, l’override se passe donc dans le dossier /override, à la racine d’une installation Prestashop. Dans ce dossier (dernière version) vous allez trouver plusieurs sous-dossier, exemple le dossier /override/classe, dans lequel il faudra placer les fichiers relatifs aux classes de Prestashop que l’on souhaitre « outrepasser ».
Votre but est de changer le comportement des données présentes dans la meta description des pages « Fabricants ». Par exemple de supprimer le nom de la boutique. Dans la version 1.6, il sera question de la classe « Meta » et de sa fonction « getManufacturerMetas ».

Voici la version du coeur de Prestashop :
public static function getManufacturerMetas($id_manufacturer, $id_lang, $page_name)
{

$page_number = (int)Tools::getValue(‘p’);
$sql = ‘SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`
FROM `’._DB_PREFIX_.’manufacturer_lang` ml
LEFT JOIN `’._DB_PREFIX_.’manufacturer` m ON (ml.`id_manufacturer` = m.`id_manufacturer`)
WHERE ml.id_lang = ‘.(int)$id_lang.’
AND ml.id_manufacturer = ‘.(int)$id_manufacturer;

if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql))
{

if (!empty($row[‘meta_description’]))
$row[‘meta_description’] = strip_tags($row[‘meta_description’]);

$row[‘meta_title’] = ($row[‘meta_title’] ? $row[‘meta_title’] : $row[‘name’]).(!empty($page_number) ? ‘ (‘.$page_number.’)’ :  »);
$row[‘meta_title’] .= ‘ – ‘.Configuration::get(‘PS_SHOP_NAME’);
return Meta::completeMetaTags($row, $row[‘meta_title’]);

}
return Meta::getHomeMetas($id_lang, $page_name);

}

Et voici la version modifiée pour y ajouter la pagination :

public static function getManufacturerMetas($id_manufacturer, $id_lang, $page_name)
{

$page_number = (int)Tools::getValue(‘p’);
$sql = ‘SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`
FROM `’._DB_PREFIX_.’manufacturer_lang` ml
LEFT JOIN `’._DB_PREFIX_.’manufacturer` m ON (ml.`id_manufacturer` = m.`id_manufacturer`)
WHERE ml.id_lang = ‘.(int)$id_lang.’
AND ml.id_manufacturer = ‘.(int)$id_manufacturer;

if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql))
{

if (!empty($row[‘meta_description’]))
$row[‘meta_description’] = strip_tags($row[‘meta_description’]);

$row[‘meta_title’] = ($row[‘meta_title’] ? $row[‘meta_title’] : $row[‘name’]).(!empty($page_number) ? ‘ (‘.$page_number.’)’ :  »);
//$row[‘meta_title’] .= ‘ – ‘.Configuration::get(‘PS_SHOP_NAME’);
return Meta::completeMetaTags($row, $row[‘meta_title’]);

}
return Meta::getHomeMetas($id_lang, $page_name);

}

Le fichier d’override portera le même nom que la classe, à savoir Meta.php et sera placer ici : /override/classe/Meta.php, voici son contenu :

class Meta extends MetaCore
{

public static function getManufacturerMetas($id_manufacturer, $id_lang, $page_name)
{

$page_number = (int)Tools::getValue(‘p’);
$sql = ‘SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`
FROM `’._DB_PREFIX_.’manufacturer_lang` ml
LEFT JOIN `’._DB_PREFIX_.’manufacturer` m ON (ml.`id_manufacturer` = m.`id_manufacturer`)
WHERE ml.id_lang = ‘.(int)$id_lang.’
AND ml.id_manufacturer = ‘.(int)$id_manufacturer;
if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql))
{

if (!empty($row[‘meta_description’]))
$row[‘meta_description’] = strip_tags($row[‘meta_description’]);
$row[‘meta_title’] = ($row[‘meta_title’] ? $row[‘meta_title’] : $row[‘name’]).(!empty($page_number) ? ‘ (‘.$page_number.’)’ :  »);
//$row[‘meta_title’] .= ‘ – ‘.Configuration::get(‘PS_SHOP_NAME’);
return Meta::completeMetaTags($row, $row[‘meta_title’]);

}
return Meta::getHomeMetas($id_lang, $page_name);

}

}

N’oubliez pas d’écraser le fichier /cache/class_index.php la première fois que vous ajoutez un fichier d’override afin que les changements soient pris en compte, ne vous inquiétez pas celui-ci est régénéré automatiquement par Prestashop, vous pouvez y aller les yeux fermés. Lors d’une prochaine modification d’un fichier override déjà ajouté, cette manipulation ne sera pas nécessaire.

Besoin d’aide sur Prestashop

L’override est comme nous venons de le voir plus complexe à mettre en oeuvre mais les bénéfices se récoltent avec le temps, si vous ne vous sentez pas en mesure d’appliquer ces modifications vous mêmes, faites appel à un professionnel. Je propose mes services pour les e-commerçants travaillant sur Prestashop. Envoyez votre demande ici : contact.