Talezam Posted June 22, 2015 Share Posted June 22, 2015 (edited) Bonjour à tous, Je suis actuellement en train de réaliser ma boutique avec Prestashop 1.6. Lorsque l'on créé une déclinaison pour un produit, on choisit le champ à modifier, une taille de Tee-shirt par exemple, en passant d'une taille à l'autre on peut modifier la référence : Taille S : TS Taille M : TM Ceci est un exemple. J'aurai voulu rajouter un nouveau champs qui se modifierait en fonction du changement de la taille. Ajout du champs dans la base de données J'ajoute donc un champs dans la table PREFIX_product_attribute. Je nomme donc ce champ cardboards_by_pallet. C'est une variable de type TINYINT, avec 4 chiffres maximums. 2. Ajout du champs dans le Back Office Dans le fichier \adminPREFIX\themes\default\template\controllers\products\combinations.TPL Je rajoute un champ de texte à la ligne 320 : <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/> 3. Modification des classes Dans le fichier /classes/Combination.php, j'annonce ma variable à la ligne 59. public $cardboards_by_pallet; J'annonce aussi ces caractéristiques à la ligne 85. 'cardboards_by_pallet' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'size' => 4), Dans le fichier /classes/Product.php : Dans la fonction public function addCombinationEntity : J'ajoute $cardboards_by_pallet à la liste des variables annoncées. public function addCombinationEntity($wholesale_price, $price, $weight, $unit_impact, $ecotax, $quantity, $id_images, $reference, $cardboards_by_pallet,$id_supplier, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null) Puis juste en dessous : $id_product_attribute = $this->addAttribute( $price, $weight, $unit_impact, $ecotax, $id_images, $reference, $cardboards_by_pallet, $ean13, $default, $location, $upc, $minimal_quantity, $id_shop_list, $available_date); Dans la fonction public function updateAttribute : public function updateAttribute($id_product_attribute, $wholesale_price, $price, $weight, $unit, $ecotax, $id_images, $reference, $cardboards_by_pallet, $ean13, $default, $location = null, $upc = null, $minimal_quantity = null, $available_date = null, $update_all_fields = true, array $id_shop_list = array()) J'ajoute ensuite la ligne suivante ligne 1455 : $combination->cardboards_by_pallet = pSQL($cardboards_by_pallet); Dans la fonction public function addAttribute, j'annonce toujours ma nouvelle variable : public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference,$cardboards_by_pallet,$ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null) J'ajoute ensuite la ligne suivante ligne 1510 : $combination->cardboards_by_pallet = pSQL($cardboards_by_pallet); Dans la fonction public function getAttributesGroups, je rajoute la variable dans la liste suivant $sql = [...] pa.`cardboards_by_pallet` 4. Modification des controllers Dans le fichier /Controllers/front/ProductController.php, je rajoute le texte ci-dessous à la ligne 457. $combinations[$row['id_product_attribute']]['cardboards_by_pallet'] = $row['cardboards_by_pallet']; Dans le fichier /Controllers/admin/AdminProductsController.php. Dans la fonction public function processProductAttribute, je rajoute la suite à deux endroits. Ligne 871 et 903 Tools::getValue('attribute_cardboards_by_pallet'), Ligne 3632 : array_push($product_props, 'reference', 'cardboards_by_pallet', 'ean13', 'upc', 'available_for_order', 'show_price', 'online_only', 'id_manufacturer' ); Ligne 4061 : $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 fonctions des personnes et des modifications effectuées précédemment. J'ai effectué les modifications précédentes. Dans ma base de données, il y a bien l'ajout de ma nouvelle variable à la création de la déclinaison du produit. Mais, je ne vois plus les déclinaisons de produits dans le Back Office. EDIT 1 : Je viens de trouver mon erreur, c'est réglé. Partie 3 : J'avais mis : 'cardboards_by_pallet' => array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isInt', 'size' => 4), Il fallait enlever 'shop' => true, ce qui donne : 'cardboards_by_pallet' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'size' => 4), Je revois les déclinaisons dans le Back Office. En espérant que ça en aide certains. Maintenant, il ne me reste plus qu'à afficher cette variable dans le fichier product.tpl, mais je n'arrive pas à l'afficher. Edit 2 : Lorsque j'active le mode debug, j'obtiens cette erreur : Notice: Undefined property: Product::$piece_by_cardboard in /homepages/29/d314111698/htdocs/prestashop/cache/smarty/compile/db/1b/72/db1b721154d4782b4f7b206d7131c896a7d951e8.file.product.tpl.php on line 348 J'utilise aussi {$product|@print_r} pour afficher toutes les variables présentes dans $product, ma nouvelle variable est absente. Ma nouvelle variable n'est pas "ajoutée" à la variable $product de smarty, mais je ne vois toujours pas où peut se situer l'erreur ou l'oubli. Je commence à ne plus avoir de cheveux sur le crâne, ca va faire 1 semaine que je cherche d'où peux venir le problème ... Je m'en remet à vous pour m'aider. Cordialement, Tal' Edited June 26, 2015 by Talezam (see edit history) Link to comment Share on other sites More sharing options...
LuzoWeb Posted June 28, 2015 Share Posted June 28, 2015 Salut, T'as essayé de vider le cache smary et le cache des classes ? /cache/smarty /cache/index_class.php Link to comment Share on other sites More sharing options...
Talezam Posted June 29, 2015 Author Share Posted June 29, 2015 (edited) Bonjour, Oui, j'ai vidé le cache, désactivé la mise en cache et activé la recompilation automatique du template. Edited June 29, 2015 by Talezam (see edit history) Link to comment Share on other sites More sharing options...
LuzoWeb Posted June 29, 2015 Share Posted June 29, 2015 Dans ce cas, peux tu me confirmer que tu as ajouté le champ "public $piece_by_cardboard;" dans la class Product avec ou sans override (/override/classes/Product.php). Link to comment Share on other sites More sharing options...
Talezam Posted June 29, 2015 Author Share Posted June 29, 2015 (edited) J'ai tout fait sans override, ca vient peut être de là, car j'ai un peu de mal a utilisé l'override. Il faut quand même les annoncer dans Product.php et pas seulement dans Combination.php ? Je vais tester d'ici demain après midi. Je te redirais ça. Edited June 30, 2015 by Talezam (see edit history) Link to comment Share on other sites More sharing options...
Talezam Posted June 30, 2015 Author Share Posted June 30, 2015 (edited) Bonjour, Alors, j'ai testé en rajoutant : public $piece_by_cardboard; dans la classe product, en rajoutant une fois : 'cardboards_by_pallet' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'size' => 4), et sans cela. Je n'obtiens plus d'erreur en mode debug. Mais, la nouvelle variable que j'ai rentrée dans la BDD PREFIX.product_attribute ne va pas être récupéré. Je continue de chercher. Lorsque je fais : {$combinations|@print_r:1} Je vois bien mes déclinaisons, et la valeur de ma nouvelle variable en fonction de la déclinaison. Mais en faisant : $combinations->cardboards_by_pallet Il y a cette erreur : Notice: Trying to get property of non-object in /homepages/29/d314111698/htdocs/prestashop/cache/smarty/compile/db/1b/72/db1b721154d4782b4f7b206d7131c896a7d951e8.file.product.tpl.php on line 358 Si j'enlève du fichier product.php, la requête sql de ma nouvelle variable(pa.`cardboards_by_pallet`), elle n'est plus visible lorsque j'affiche toutes les variables de $combinations. Si je met {$combinations.[iD de ma déclinaison].cardboards_by_pallet}, j'obtiens bien la variable qui s'affiche. Je continue de chercher .... Cordialement, Tal' Edited June 30, 2015 by Talezam (see edit history) Link to comment Share on other sites More sharing options...
Talezam Posted July 1, 2015 Author Share Posted July 1, 2015 Bonjour à tous, Je n'arrive toujours pas à afficher correctement ma valeur sur la fiche du produit. En ce qui concerne la modification de ma nouvelle variable en fonction de la sélection du diamètre, la référence change. Il faudrait que ma nouvelle variable change aussi, je pense que cela si situe dans le product.js du thème que j'utilise, mais je ne peux pas tester tant que je n'arrive pas à afficher ma variable sur le fiche produit .... Link to comment Share on other sites More sharing options...
Talezam Posted July 6, 2015 Author Share Posted July 6, 2015 Un petit up. JE sais que pour le changement de la valeur lors du choix du client, il faut modifier le fichier product.js, mais si je n'arrive pas à afficher la valeur de la déclinaison par défaut, je ne peux pas tester, la modification de cet élément en fonction du choix du client. Link to comment Share on other sites More sharing options...
Tatort Posted March 21, 2017 Share Posted March 21, 2017 Cela semble marcher pour lui : https://www.prestashop.com/forums/topic/455645-erreur-apres-ajout-champ-declinaison/?hl=%2Bdeclinaison Mais perso ça inverse me champ dans les déclinaisons... Link to comment Share on other sites More sharing options...
Tatort Posted March 21, 2017 Share Posted March 21, 2017 Cela semble marcher pour lui : https://www.prestashop.com/forums/topic/455645-erreur-apres-ajout-champ-declinaison/?hl=%2Bdeclinaison Mais perso ça inverse me champ dans les déclinaisons... Après remise a zéro... cela fonctionne pour moi.... Pour afficher sur la page produit dynamiquement voici ce qu'il faut faire après: Pour ceux qui veulent aller plus loin et afficher dynamiquement la nouvelle référence, un tuto pour la partie JS... https://www.prestashop.com/forums/topic/250198-afficher-ean13-code-barre-sur-fiche-produit/page-2 Voilou Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now