jerem_ Posted October 6, 2016 Share Posted October 6, 2016 Bonjour, J'essaye désespérément d'ajouter une simple case à cocher dans mon admin Prestashop (1.6.1) afin de définir le statut d'un produit (en l’occurrence s'il est à vendre sur devis ou non). J'ai ajouté une colonne sur_devis dans la table ps_product Voici mon fichier /override/classes/Product.php <?php class Product extends ProductCore { public $sur_devis; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { Product::$definition['fields']['sur_devis'] = array('type' => self::TYPE_BOOL, 'lang' => true, 'validate' => 'isBool'); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } } J'ai ajouté le bloc affichant la checkbox dans le tpl admin surchargé de telle sorte que j'ai ce bloc ci-dessous : <div id="product_options" class="form-group"> <div class="col-lg-12"> <div class="form-group"> <div class="col-lg-1"> <span class="pull-right"> {if isset($display_multishop_checkboxes) && $display_multishop_checkboxes} {include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="available_for_order" type="default"} {include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="show_price" type="show_price"} {include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="sur_devis" type="default"} {include file="controllers/products/multishop/checkbox.tpl" only_checkbox="true" field="online_only" type="default"} {/if} </span> </div> <label class="control-label col-lg-2" for="available_for_order"> {l s='Options'} </label> <div class="col-lg-9"> <div class="checkbox"> <label for="available_for_order"> <input type="checkbox" name="available_for_order" id="available_for_order" value="1" {if $product->available_for_order}checked="checked"{/if} > {l s='Available for order'}</label> </div> <div class="checkbox"> <label for="sur_devis"> <input type="checkbox" name="sur_devis" id="sur_devis" value="1" {if $product->sur_devis}checked="checked"{/if} > {l s='Sur devis'}</label> </div> <div class="checkbox"> <label for="show_price"> <input type="checkbox" name="show_price" id="show_price" value="1" {if $product->show_price}checked="checked"{/if} {if $product->available_for_order}disabled="disabled"{/if} > {l s='Show price'}</label> </div> <div class="checkbox"> <label for="online_only"> <input type="checkbox" name="online_only" id="online_only" value="1" {if $product->online_only}checked="checked"{/if} > {l s='Online only (not sold in your retail store)'}</label> </div> </div> </div> <div class="form-group"> <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="condition" type="default"}</span></div> <label class="control-label col-lg-2" for="condition"> {l s='Condition'} </label> <div class="col-lg-3"> <select name="condition" id="condition"> <option value="new" {if $product->condition == 'new'}selected="selected"{/if} >{l s='New'}</option> <option value="used" {if $product->condition == 'used'}selected="selected"{/if} >{l s='Used'}</option> <option value="refurbished" {if $product->condition == 'refurbished'}selected="selected"{/if}>{l s='Refurbished'}</option> </select> </div> </div> </div> </div> J'ai également surchargé le fichier AdminProductsController.php et les fonctions copyFromPost et initFormInformations pour appliquer un comportement identique à la checkbox "online_only" (je vous fais grâce du code ici, je ne pense pas que le soucis provienne de là...) Et ça ne veut pas fonctionner Lors de l'enregistrement d'un produit, j'obtiens l'erreur "Une erreur s'est produite pendant la mise à jour de l'objet. product ()" qui est loin d'être bien explicite... Notons qu'au premier enregistrement, sur_devis prend bien la valeur 1 dans la bdd malgré l'erreur mais que peu importe si l'on coche ou décoche, cela reste à 1 par la suite. Si quelqu'un peut me sauver de là, je lui en serai reconnaissant ! Merci d'avance ! Link to comment Share on other sites More sharing options...
tchiboun Posted December 6, 2016 Share Posted December 6, 2016 Salut Jerem, J'ai le même problème que toi, as-tu trouvé une solution ? Merci. Pierre. Link to comment Share on other sites More sharing options...
jerem_ Posted December 6, 2016 Author Share Posted December 6, 2016 (edited) Salut tchiboun, Oui, j'ai trouvé mon erreur après pas mal de temps à tester des choses farfelues... Il s'agissait de passer le booléen de multilangue à false.... c'était pourtant tout bête mais bon ! Plus concrètement, dans le fichier /override/classes/Product.php dont j'ai mis le code plus haut, remplacer 'lang' => true par 'lang' => false soit cette ligne : Product::$definition['fields']['sur_devis'] = array('type' => self::TYPE_BOOL, 'lang' => false, 'validate' => 'isBool'); J'espère que ça résoudra également ton soucis ! Edited December 6, 2016 by jerem_ (see edit history) 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