Jump to content

Ajout checkbox Informations produits


 Share

Recommended Posts

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

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 !

 

Share this post


Link to post
Share on other sites

  • 1 month later...

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 by jerem_ (see edit history)

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More