Jump to content

supprimer le choix de quantité sur certains produits


Recommended Posts

C'est possible en surchargant l'object Product pour y ajouter une propriété (par ex allow_qty_input) et modifier la définiton de l'objet. N'oubliez pas de modifier votre base

ALTER ps_product ADD allow_qty_input TINYINT(1) UNSIGNED NOT NULL DEFAULT 1;

Vous pouvez ensuite surcharger le template quantities.tpl (override/controllers/template/products/) pour y ajouter la possibilité d'attribuer une valeur à cette propriété, puisqu'il s'agit d'une valeur booléenne (true/false), préférez une checkbox ou un switch.

 

Dans votre tpl product.tpl, modifier l'input quantité selon la valeur de allow_qty_input

{if product->allow_qty_input|intval}
<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
	<label>{l s='Quantity:'}</label>
	<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" />
		<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
			<span><i class="icon-minus"></i></span>
		</a>
		<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up">
			<span><i class="icon-plus"></i></span>
		</a>
		<span class="clearfix"></span>
	</p>
{else}
          <input type="hidden" name="qty" id="quantity_wanted" value="{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}" />
{/if}
Edited by zombie process (see edit history)
Link to comment
Share on other sites

Salut

 

Désolé de répondre un peu tardivement

 

Lorsque j'éxécute la requête SQL suivante :

ALTER ps_product ADD allow_qty_inputTINYINT(1) UNSIGNED NOT NULL DEFAULT 1;

 

cela me retourne qu'il y a une erreur de syntaxe

 

EDIT : j'ai modifier la requête en mettant pss_product comme dans ma base au lieu de ps_product

mais cela me retourne quand même qu'il y a une erreur de syntaxe

 

 

après, est-ce qu'il est possible de m'expliquer pas-à-pas en mixant les deux topics parce que je ne suis pas sûr de tout comprendre...

Edited by favancini (see edit history)
Link to comment
Share on other sites

re

 

j'ai mis la ligne sans le point virgule

ALTER pss_product ADD allow_qty_input TINYINT(1) UNSIGNED NOT NULL DEFAULT 1

 

mais cela me retourne toujours une erreur de syntaxe

 

Peut-il y avoir un problème de version de MySQL?

Si j'en crois la doc vers laquelle ma base renvoi, je suis en MySQL 5.1

Link to comment
Share on other sites

Coucou

 

ou peut etre que le colonne a déjà été crée vérifie a la fin de pss_product qu'il n'y est pas une colonne allow_qty_input

 

j'ai fait cette manip plusieurs fois elle fonctionne très bien 

ALTER `pss_product` ADD `allow_qty_input` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1

** les ` sont les carractères fait avec les touches ALT GR+7

 

@++

 

Loulou66

Link to comment
Share on other sites

j'ai tapé la ligne à la main (avec ALT GR+7) et fait aussi un copier-coller depuis ton post et cela ne fonctionne pas

 

l'erreur est :  #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`pss_product` ADD `allow_qty_input` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1' at line 1

 

 

Mon serveur indique au dessus de la fenêtre de requête MySQL :

Exécuter une ou des requêtes SQL sur le serveur "localhost"

Ma base est sur un serveur OVH : est-ce normal que cela indique "localhost"?

 

A+

 

François

Link to comment
Share on other sites

salut,

 

je n'ai pas de fichier quantities.tpl dont parle zombie process dans son premier post, dans le dossier override ni dans un autre dossier.

 

j'avais modifier le fichier product.tpl pour que le choix de quantité n'apparaisse sur aucun produit : cela provient-il de cette modif?

Link to comment
Share on other sites

quantities.tpl est un tpl backoffice, il peut être surchargé:

 

l'original se trouve dans /dossier_admin/themes/default/template/controllers/products; il s'agit d'en placer une copie dans override/controllers/admin/templates/products (créer ces dossiers s'il n'existent pas); La dedans tu pourra ajouter ton input pour pouvoir modifier la valeur (1/0) de allow_qty_input.

 

Il faut surcharger la classe Product également, il s'agit simplement d'ajouter la propriété allow_qty_input et de modifier la variable $definition. Tout le reste peut être supprimé. Une fois que l'objet Produit "sait" qu'il a une nouvelle propriété alors tu peux l'utiliser dans ton template. Il faut faire les choses dans l'ordre.

 

modif bdd

modif (override) classe Product

modif formulaire back-office (quantities.tpl) mais ca peut aussi être information.tpl (peu importe)

modif tpl front-office

Edited by zombie process (see edit history)
Link to comment
Share on other sites

Salut,

 

Ok, alors, je vous mets les modifs que j'ai faites :

 

1- la modif bdd, c'est fait.

2- modif (override) classe Product, dans product.php

	/** @var boolean Product statuts */
	public $active = true;
	
	/** @var boolean Product statuts */
    public $allow_qty_input = false;
	
	/** @var boolean Product statuts */
	public $redirect_type = '';
			'active' => 					array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
			'redirect_type' => 				array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isString'),
			'id_product_redirected' => 		array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId'),
			'available_for_order' => 		array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
			'allow_qty_input' =>            array('type' => self::TYPE_BOOL, 'shop' => true, 'validate' => 'isBool'),
			'available_date' => 			array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDateFormat'),

3- modif formulaire back-office; j'ai modifié le information.tpl

	<div class="form-group">
		<label class="control-label col-lg-3" for="upc">
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='This type of product code is widely used in the United States, Canada, the United Kingdom, Australia, New Zealand and in other countries.'}">
				{$bullet_common_field} {l s='UPC barcode'}
			</span>
		</label>
		<div class="col-lg-3">
			<input maxlength="12" type="text" id="upc" name="upc" value="{$product->upc|escape:html:'UTF-8'}" />
		</div>
	</div>

	<hr/>

	{* status informations *}
	<div class="form-group">        
    <label class="control-label col-lg-3">
        {include file="controllers/products/multishop/checkbox.tpl" field="allow_qty_input" type="radio" onclick=""}
        {l s='Display Img New'}
    </label>
    <div class="col-lg-9">
        <span class="switch prestashop-switch fixed-width-lg">
        <input onclick="toggleDraftWarning(false);" type="radio" name="allow_qty_input" id="allow_qty_input_on" value="1" {if $product->allow_qty_input}checked="checked" {/if} />
        <label for="allow_qty_input_on" class="radioCheck">
        {l s='Yes'}
        </label>
        <input onclick="toggleDraftWarning(true);" type="radio" name="allow_qty_input" id="allow_qty_input_off" value="0" {if !$product->allow_qty_input}checked="checked"{/if} />
        <label for="allow_qty_input_off" class="radioCheck">
        {l s='No'}
        </label>
        <a class="slide-button btn"></a>
        </span>
    </div>
</div>
	<div class="form-group">		
		<label class="control-label col-lg-3">
			{include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
			{l s='Enabled'}
		</label>
		<div class="col-lg-9">
			<span class="switch prestashop-switch fixed-width-lg">
				<input onclick="toggleDraftWarning(false);showOptions(true);showRedirectProductOptions(false);" type="radio" name="active" id="active_on" value="1" {if $product->active || !$product->isAssociatedToShop()}checked="checked" {/if} />
				<label for="active_on" class="radioCheck">
					{l s='Yes'}
				</label>
				<input onclick="toggleDraftWarning(true);showOptions(false);showRedirectProductOptions(true);"  type="radio" name="active" id="active_off" value="0" {if !$product->active && $product->isAssociatedToShop()}checked="checked"{/if} />
				<label for="active_off" class="radioCheck">
					{l s='No'}
				</label>
				<a class="slide-button btn"></a>
			</span>
		</

4- modif tpl front office, product.tpl

						{hook h="displayProductPriceBlock" product=$product type="weight"}
						<div class="clear"></div>
					</div> <!-- end content_prices -->
					<div class="product_attributes clearfix">
						<!-- quantity wanted -->
						{if !$PS_CATALOG_MODE}
						{if product->allow_qty_input|intval}
<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
	<label>{l s='Quantity:'}</label>
	<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" />
		<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
			<span><i class="icon-minus"></i></span>
		</a>
		<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up">
			<span><i class="icon-plus"></i></span>
		</a>
		<span class="clearfix"></span>
	</p>
	{else}
          <input type="hidden" name="qty" id="quantity_wanted" value="{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}" />
{/if}
						{/if}
						<!-- minimal quantity wanted -->
						<p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
							{l s='This product is not sold individually. You must select at least'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b> {l s='quantity for this product.'}
						</p>
						{if isset($groups)}
							<!-- attributes -->
							<div id="attributes">

>> les produits ne s'affichent plus dans le front office

Link to comment
Share on other sites

Salut,

 

Cela fonctionne, merci beaucoup pour votre aide  :)

 

Par contre, même si j'ai bien le bouton on/off dans la page produit dans le back office et que ce bouton fonctionne puisque cela active ou désactive bien l'affichage des quantités dans le front office, j'ai le message :

Une erreur s'est produite pendant la mise à jour de l'objet. product ()

 

dans le back office lorsque j'enregistre les modifications apportées aux produits

Edited by favancini (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Merci pour ce sujet, c'est exactement ce que je cherchais.

 

J'ai juste besoin d'une petite precision ; j'ai le message d'erreur :

 

Une erreur s'est produite pendant la mise à jour de l'objet. product ()

 

mais je ne sais pas comment faire pour :

 

"Créer la même entrée  dans pss_product_shop"

 

Pouvez vous m'aider.

 

Merci

Link to comment
Share on other sites

  • 1 month later...
  • 3 years later...
  • 2 weeks later...

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
×
×
  • Create New...