Vous avez toujours voulu personnaliser votre boutique Prestashop avec un champ personnalisé de type textarea ?
Voici la solution enfin expliqué et détaillé.
Modification de la base de données
Allez sur votre base de données, et choisissez la table « _DB_PREFIX_product_lang » où _DB_PREFIX_ correspond à votre préfixe de base de données. Dans cette table, ajoutez un champ « monchampperso »
Override de la class Product
Ici, il y a deux cas de figure :
Soit vous avez une version 1.5.3.x ou inférieure
Il faudra alors éditer le fichier « /override/classes/Product.php » pour y ajouter ceci :
|
public $monchampperso; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { Product::$definition['fields']['monchampperso'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } |
Soit vous avez une version 1.5.4 ou supérieure
Il faudra alors créer le fichier « /override/classes/Product.php »
|
<?php class Product extends ProductCore { public $monchampperso; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { Product::$definition['fields']['monchampperso'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } } |
Modification de la vue du backoffice
Votre site contient maintenant votre champ personnalisé « monchampperso ».
Il faut maintenant pouvoir modifier le formulaire du produit pour ajouter/modifier la valeur de ce champ.
Copiez le fichier admin/themes/default/template/controllers/products/informations.tpl et collez-le ensuite dans /override/controllers/admin/templates/products/informations.tpl
Vous pourrez désormais éditer ce fichier pour afficher votre champ.
Vers la ligne 299, vous devriez avoir une ligne du tableau qui se ferme (celui de la description.
Vous pouvez y ajouter celui de votre champ personnalisé :
|
<tr> <td class="col-left"> {include file="controllers/products/multishop/checkbox.tpl" field="monchampperso" type="tinymce" multilang="true"} <label>{l s='Mon champ personnalisé:'}<br /></label> <p class="product_description">({l s='Appears in the footer of the product page'})</p> </td> <td style="padding-bottom:5px;"> {include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='monchampperso' input_value=$product->monchampperso } <p class="clear"></p> </td> </tr> |
Affichage du champ sur le front office
Après avoir modifié la valeur du champ en base, il ne reste plus qu’à l’afficher du côté Front.
Dans le dossier de votre thème, vous pouvez modifier le template « product.tpl » (/themes/votretheme/product.tpl)
Ajoutez où vous le souhaitez votre valeur :
Vider votre cache ainsi que l’autoload
Prestashop étant généralement mis en cache pour accélerer l’affichage en production, il vous sera presque nécessaire de vider le cache.
Pour les versions supérieurs à 1.5.5, il vous suffit d’aller dans l’administration de votre site, onglet Paramètre avancés, puis Performances, et de trouver le bouton Effacer le cache de Smarty et le cache de l’Autoload.
Pour les versions inférieures, il faut supprimer tout ce qui se trouve dans le dossier /cache/
Ne supprimez pas ce dossier mais bien l’intérieur pour éviter les soucis de réécriture et de droit de fichier, au cas où !