Jump to content
favancini

supprimer le choix de quantité sur certains produits

Recommended Posts

Bonjour,

 

Je voudrais retirer le choix de quantité sur certains de mes produits.

 

Je sais le faire pour tous les produits : en modifiant le product.tpl

mais pas individuellement pour certains produits

 

Par avance merci pour votre aide

  • Like 1

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

coucou

 

je complète ce qu'a dit @Zombie process

 

regarde ce post ce le même principe pour ps 1.6 (pour ps 1.5 les post est plus bas)

 

http://www.prestashop.com/forums/topic/192268-ajouter-un-bandeau-nouveau-sur-les-nouveaux-produits/?p=1660238

 

sauf qu'en étape 4 tu modifieras comme la indiquer zombie le product.tpl

 

@++

 

Loulou66

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

Coucou

 

quelle est ton prefix des table dans la base de donnée ?

cad. ps_ product ou pss_product   autrechose_product

 

met le bon prefix et un espace entre allow_qty_input  et  TINYINT(1)

 

@++

 

Loulou66

Share this post


Link to post
Share on other sites

Salut,

 

le prefix des tables dans ma base de donnée est pss

 

j'ai mis : ALTER pss_product ADD allow_qty_input TINYINT(1) UNSIGNED NOT NULL DEFAULT 1;

 

mais j'ai toujours une erreur de syntaxe

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Coucou

 

 

ha oui si je recopie tes betises aussi on va pa s s'en sortir ^^

 

copie les phrases qui se trouve dans le lien colle dans la requete sql et change le nom de la colonne 

 

et voilou

 

@++

 

Loulou66

Share this post


Link to post
Share on other sites

oki

 

requête

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

 

résultat

Votre requête SQL a été exécutée avec succès (Traitement en 0.1614 sec)

 

Merci pour votre patience :)

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

coucou

 

bien joué ^^

 

il s'agit du fichier themes/ton_theme/product.tpl

ligne 319 sur un ps 1.6.0.9

 

@++

 

Loulou66

Share this post


Link to post
Share on other sites

salut

 

j'ai modifié le product.tpl et mes produits ne se chargent plus sur le front office

Share this post


Link to post
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)

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Coucou

remplaces
{if product->allow_qty_input|intval}
par
{if $product->allow_qty_input|intval}

@++

 

Loulou66

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

Coucou

 

tu as bien crée la même entée  dans pss_product_shop ?

 

@++

 

Loulou66

Share this post


Link to post
Share on other sites

Salut,

 

je n'avais pas créé cette entrée

 

cela fonctionne maintenant.

 

Encore merci  :)

 

A+

 

François

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Coucou,

 

J'ai finalement trouvé, c'est simplement ajouter le même champ dans la table  xxx_product_shop, sur ma base appliquer la requête :

 

ALTER TABLE ps_product_shop ADD allow_qty_input TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT 1

 

Cela fonctionne bien.

 

Merci pour ce tuto,

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

×
×
  • Create New...

Important Information

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