Modifier un modèle sur PrestaShop 1.5

La dernière version en date du CMS e-commerce PrestaShop en améliore pas mal d'aspects d'un point de vue technique, surtout concernant la surcharge des comportements par défaut. Ainsi, dans l'esprit de frameworks tels que FuelPHP, vous disposez à la racine du site d'un dossier override où vous pouvez facilement redéfinir tout ou partie de n'importe quelle classe du système. Ceci vous permettra de mettre PrestaShop à jour en conservant vos modifications.

Malgré tout, cela reste assez peu évident à mes yeux d'ajouter par exemple un champ aux produits (pour leur définir une caractéristique supplémentaire), les modèles de PrestaShop n'étant pas vraiment conçus en tant qu'entités. Voici la marche à suivre !

Tout d'abord, créons le champ correspondant dans la table qui va bien :

ALTER TABLE `ps_product` ADD `custom_field` INT NOT NULL;

Ensuite, il faut déclarer ce nouveau champ dans la classe Product en tant que membre, et le référencer dans un énorme tableau statique définissant les contraintes de chaque champ. Comme vu plus haut, nous allons surcharger la classe d'origine en créant le fichier override/classes/Product.php. Mais plutôt que de copier-coller tout le tableau, rusons un brin :

Product::$definition['fields']['custom_field'] = array('type' => ObjectModel::TYPE_STRING, 'validate' => 'isString');

class Product extends ProductCore
{
public $custom_field;
}

Jusqu'ici tout va bien ! En revanche, il serait quand même sympa que l'on puisse éditer la valeur de ce champ pour chaque produit directement en back-office, non ? Il faut pour cela ajouter, dans le template correspondant, un champ HTML portant le nom de votre propriété et étant hydraté avec sa valeur par Smarty (exactement comme les champs déjà présents). En l'occurence, ce fichier sera à choisir (selon l'endroit où le champ devra apparaître) dans le dossier admin/themes/myawesometheme/template/controllers/products.

Last but not least : si vous suivez les bonnes pratiques de développement sur PrestaShop, vous avez conservé le thème par défaut intact et l'avez dupliqué sous un autre nom afin de pouvoir travailler dessus. Idéalement, vous avez suivi le même cheminement en back-office, au cas où vous seriez justement amené à effectuer des modifications telles que celle décrite à l'instant. Dans ce cas, sachez qu'il faut indiquer à PrestaShop quel thème sera utilisé lors de l'accès au back-office, et ce, indépendamment du thème sélectionné pour la boutique, et individuellement pour chaque compte administrateur ! Gagnons donc du temps :

UPDATE `ps_employee` SET bo_theme='myawesometheme';