fond-prestashop

Prestashop : ajouter un nouveau champ dans les déclinaisons

Vous avez besoin d’ajouter un nouveau champ dans les déclinaisons d’un produit ? Comme par exemple la référence du fournisseur que vous souhaitez afficher sous le champ « Référence »

Ajout du champ dans la base de données

Dans la table « PREFIX_product_attribute » . Nommez ce champ, par exemple, « cardboards_by_pallet » . C’est une variable de type TINYINT, avec 4 chiffres maximums.

Ajout du champs dans le Back Office

Dans le fichier /adminPREFIX/themes/default/template/controllers/products/combinations.tpl, rajoutez le champ texte à la ligne ~317 (cela affichera le champ au-dessus de l’image) :

<hr/>
 <div class="form-group">
 <label class="control-label col-lg-3" for="attribute_cardboards_by_pallet">
 {l s='Cardboards by pallet'}
 </label>
 <div class="col-lg-3">
 <input maxlength="4" type="text" id="attribute_cardboards_by_pallet" name="attribute_cardboards_by_pallet" value="" />
 </div>
 </div>
 <hr/>

Modification des classes

Faites un override de la classe /classes/Combination.php, ajoutez la nouvelle variable pour votre champ :

public $cardboards_by_pallet;

Ajoutez les caractéristiques de votre champ dans la variable $definition :

'cardboards_by_pallet' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'size' => 4),

Faites un override de la classe /classes/Product.php et dans la fonction public function addCombinationEntity ajoutez $cardboards_by_pallet à la liste des variables annoncées.

public function addCombinationEntity($wholesale_price, $price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $id_supplier, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null, $cardboards_by_pallet)

Puis ajoutez la variable $cardboards_by_pallet juste en dessous :

$id_product_attribute = $this->addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location, $upc, $minimal_quantity, $id_shop_list, $available_date, $cardboards_by_pallet);

Puis ajoutez la variable $cardboards_by_pallet dans la fonction public function updateAttribute :

public function updateAttribute($id_product_attribute, $wholesale_price, $price, $weight, $unit, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = null, $available_date = null, $update_all_fields = true, array $id_shop_list = array(), $cardboards_by_pallet)

Ajoutez ensuite la ligne suivante vers la ligne ~1607 :

$combination->cardboards_by_pallet = pSQL($cardboards_by_pallet);

Dans la fonction public function addAttribute, ajoutez la variable $cardboards_by_pallet :

public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null, $cardboards_by_pallet)

Ajoutez ensuite la ligne suivante vers la ligne ~1677 :

$combination->cardboards_by_pallet = pSQL($cardboards_by_pallet);

Dans la fonction public function getAttributesGroups, ajoutez la variable dans la liste suivant $sql = […]

pa.`cardboards_by_pallet`

Modification des controllers

Faites un override du controller /Controllers/front/ProductController.php et ajouter le texte ci-dessous à la ligne ~456 :

$combinations[$row['id_product_attribute']]['cardboards_by_pallet'] = $row['cardboards_by_pallet'];

Faites un override du controller /Controllers/admin/AdminProductsController.php et dans la fonction public function processProductAttribute, ajoutez la suite à deux endroits. Ligne ~966 et ~997

Tools::getValue('attribute_cardboards_by_pallet'),

Ligne ~3975 :

array_push($product_props, 'reference', 'ean13', 'upc', 'available_for_order', 'show_price', 'online_only', 'id_manufacturer', 'cardboards_by_pallet');

Ligne ~4422 :

$comb_array[$combination['id_product_attribute']]['cardboards_by_pallet'] = $combination['cardboards_by_pallet'];
Les numéros de lignes peuvent être plus ou moins exact en fonction des personnes et des modifications effectuées précédemment.