Il est parfois nécessaire d'ajouter un champs spécifique dans la page produit, par exemple un champs html WYSIWYG semblable au champs description,
Pour cela on a besoin de ces étapes:
Ajout de l'override Product.php
NB: Il faut placer ce fichier dans /override/classes/ et supprimer la classe /cache/class_index.php pour reconstruire la structure des classes.
On voit que la classe Product hérite de la classe par défaut de Prestashop, on a ajouté le champs specific_field, et on redéfinit la classe __construct pour ajouter la règle de validation,
Ici le champs est multi langue et doit être html valide.
Et enfin on appelle le constructeur de la classe Parente.
Pour cela on a besoin de ces étapes:
- Ajout d'un Override pour étendre la classe produit par un champs spécifique
- Ajout d'un champs à la table product_lang (on va voir plus tard pourquoi dans cette table exactement)
- Ajout du champs dans le tpl de la page adminProducts
- Ajout du champs dans la page produit en front
Ajout de l'override Product.php
Prestashop permet d'étendre ses classes et ses controlleurs par un procédé qui est l'ovrride ou la surcharge
Pour ce faire, il faut créer un fichier Product.php comme cela:
class Product extends ProductCore { public $specific_field; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null){ self::$definition['fields']['specific_field'] = array('type' => self::TYPE_HTML,'lang' => true, 'validate' => 'isCleanHtml'); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } }
NB: Il faut placer ce fichier dans /override/classes/ et supprimer la classe /cache/class_index.php pour reconstruire la structure des classes.
On voit que la classe Product hérite de la classe par défaut de Prestashop, on a ajouté le champs specific_field, et on redéfinit la classe __construct pour ajouter la règle de validation,
Ici le champs est multi langue et doit être html valide.
Et enfin on appelle le constructeur de la classe Parente.
Ajout d'un champs specific_field dans la table product_lang
On a le champs specifi_field qui est multi_lang donc on doit ajouter ce champs à la table qui affiche les données multi langue du produit, à savoir product_lang, si on veut ajouter un champs qui n'est pas multi_lang, on peut l'ajouter à la table product
Ajout d'un champs WYSYWYG dans le tpl de la page adminProducts
Dans le fichier ADMIN/themes/default/template/controllers/products/innformations.tpl
Resultat:
A remplacer ADMIN par le dossier admin de votre site.
Après la ligne 359, après le champs Description, ajouter ce code:
<div class="form-group"> <div class="col-lg-1"> <span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="specific_field" type="tinymce" multilang="true"}</span></div> <label class="control-label col-lg-2" for="size_Chart_{$id_lang}"> <span class="label-tooltip" data-toggle="tooltip" title="{l s='.'}"> {l s='Specific Field'} </span> </label> <br /> <div class="col-lg-9"> {include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='size_Chart' class="autoload_rte" input_value=$product->specific_field} </div> </div>
Et le résultat quand on enregistre
Ajout du champs dans la page produit en front
Finalement, on va ajouter le champs dans la page produit:
N'importe où dans le fichier /themes/VOTRE_THEME/product.tpl
Ajouter: {$product->specific_price}
Comme ça que le tutorial est terminé, j'espère que j'étais le plus clair possible, j'attends vos commentaires!
0 commentaires :
Enregistrer un commentaire