samedi 5 décembre 2015

Ajouter un champs multi lang html dans l'admin produit de prestashop

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 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

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>


Resultat:

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