Jump to content

[RESOLU] Choix des quantités via des boutons radio + modifications du tableau "prix degressifs"


Recommended Posts

Bonjour à tous,

 

:blink: "Quelle est cette drôle d'idée  !" vous demandez-vous et une explication s'impose.

 

Mon but est de transformer le tableau des prix dégressifs de façon à ce que le client sélectionne une ligne avant de l'ajouter au panier". Pour sélectionner cette ligne des boutons radio s'imposent naturellement. Ce tableau remplacerai donc le champ quantité.

 

Pour le moment j'ai ajouté une colonne contenant le prix total de chaque déclinaison.

 

Pour une meilleur compréhension, allez voir ici et sélectionnez le produit affiche.

 

 

Bien passons aux choses sérieuses maintenant.  ;)

 

Pour le moment je n'en suis qu'à la phase teste.

 

Si je remplace mon champ quantité par :

<input type="radio" name="qty" value=100 />100<br/>
<input type="radio" name="qty" value=200 />200<br/>
<input type="radio" name="qty" value=300 />300<br/>

et qu'après avoir fait mon choix, je clique sur 'ajouter au panier', la quantité envoyée est 1.

 

Le code du champ texte 'quantité' est celui-ci :

<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}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />

et celui de mon menu déroulant est :

<select name="qty" id="quantity_wanted"> <option>100</option> <option>200</option> <option>300</option></select>

Pour le menu et le champ texte, 'qty' contient la saisie ou la sélection par contre pour les radio il ne prend pas en compte ce que contient les values.

 

L'envoi du formulaire se fait en method="post" donc je ne comprend pas pourquoi 'qty ' n'accepte pas les values alors qu'il devrait les prendre (ou du moins celle sélectionnée).

 

Donc j'en perd mon latin et mon html.

 

Si quelqu'un a une idée il est le bienvenue.

 

Merci d'avance.

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

Bonjour Yopixel,

 

En effet, logiquement il les faut parce que visiblement il récupère le texte et non la valeur. Il doit les convertir plus loin.

 

Mais ça ne fonctionne pas non plus je l'avais déjà testé.

 

Merci quand même  ^_^

Link to comment
Share on other sites

Bonjour

 

et tu laisse les deux à la fois; les radio  et le input-text à changer en hidden et à chaque choix du bouton radio le champs text (hidden) recevra l'option choisie avec un peu de javascript : ton code sera comme suit:

<input type="radio" name="un_nom_pas_qty" value="100" onclick="$('#quantity_wanted').val(this.value)" />100<br/>
<input type="radio" name="un_nom_pas_qty" value="200" onclick="$('#quantity_wanted').val(this.value)" />200<br/>
<input type="radio" name="un_nom_pas_qty" value="300" onclick="$('#quantity_wanted').val(this.value)" />300<br/>
  • Like 1
Link to comment
Share on other sites

Maiiiiis oui ! quel andouille je suis de ne pas y avoir pensé ( :ph34r: je me cache)

 

+1 à ce très cher S-Hammani.

 

C'est super merci beaucoup.

 

Pour répondre à Yopixel, c'est pareil je l'avait testé avec l'id aussi. Merci à toi aussi d'avoir pris un peu de ton temps pour m'aider.

 

Maintenant y à plus qu'à modifier mon tableau 'prix dégressifs'.

 

Je ne ferme pas ce poste j'y ajouterai (si ça fonctionne) mon bout de code pour ceux que ça interesse.

 

Tchô !

Link to comment
Share on other sites

Voili voilou, j'ai mon tableau aux prix dégressifs qui me permet d'ajouter au panier la ligne selectionnée.

 

Pour ceux que ça interesse, nous allons modifier le fichier product.tpl

 

Tout en haut du code avec les déclaration de variables ajouter après <script type="text/javascript">

{assign var="p_unit" value=0};
{assign var="num_radio" value=0};

p_unit va nous permettre de récupérer le prix unitaire

num_radio va permettre à l'utilisateur de cliquer sur la désignation afin de faire sa selection.

 

Ensuite, nous avons besoin de modifier le champs texte (dans lequel on insere la quantité) par un menu déroulant. Pour cela repérer : <!-- quantity wanted -->

 

et changer les lignes 

<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}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />

par 

<label>{l s='Quantity:'}</label>
<select name="qty" id="quantity_wanted"> <option>100</option> <option>250</option> <option>500</option> <option>1000</option> </select>

Pour la partie prix dégressifs voici le code avec les modifs :

<div id="quantityDiscount">
	<table class="std_discount">
	<thead>
		<tr>
			<th>{l s='Product'}</th>
			<th class="th_titre">{l s='From (qty)'}</th>
			<th class="th_titre">{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}{l s='Price (unit)'}{else}{l s='Discount'}{/if}</th>
			<th class="th_titre">{l s='TOTAL'}</th>
		</tr>
	</thead>
	<tbody>
		{foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
		{$num_radio=$num_radio+1}
		<tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}">			
			<td> <!-- **************************************************************************************************** DESIGNATION -->
				<div class="radio_group">
					{if ((($product->id == 8) and ($quantity_discount.quantity|intval != 3000)) or (($product->id == 9) and ($quantity_discount.quantity|intval != 250)))}
						<input type="radio" name="radio_prix" class="radio_type" id="radio{$num_radio}" value="{$quantity_discount.quantity|intval}" onclick="$('#quantity_wanted').val(this.value)" />
					{else}
						<input type="radio" name="radio_prix" class="radio_type" id="radio{$num_radio}" value="{$quantity_discount.quantity|intval}" checked="checked" onclick="$('#quantity_wanted').val(this.value)" />
					{/if}
				</div>
				<div class="label_group">
					<label for="radio{$num_radio}" /> 
						{if (isset($quantity_discount.attributes) && ($quantity_discount.attributes))}
							{$product->getProductName($quantity_discount.id_product, $quantity_discount.id_product_attribute)}
						{else}
							{$product->getProductName($quantity_discount.id_product)}
						{/if}
					</label>
				</div>
			</td>
			<td id="td_qty">{$quantity_discount.quantity|intval}</td> <!-- ************************************************************ QUANTITE -->
			<td id="td_unit"> <!-- ***************************************************************************************************** PRIX -->
				{if $quantity_discount.price >= 0 OR $quantity_discount.reduction_type == 'amount'}
					{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}
						{convertPrice price=$productPrice-$quantity_discount.real_value|floatval}
						{$p_unit =$productPrice-$quantity_discount.real_value|floatval}
					{else}
						-{convertPrice price=$quantity_discount.real_value|floatval}
						{$p_unit =-$quantity_discount.real_value|floatval}
					{/if}
				{else}
					{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}
						{convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval}
						{$p_unit =$productPrice-($productPrice*$quantity_discount.reduction)|floatval}
					{else}
						-{$quantity_discount.real_value|floatval}%
						{$p_unit =-$quantity_discount.real_value|floatval}%
					{/if}
				{/if}
			</td>
			<td id="td_total"> <!-- ****************************************************************************************************** TOTAL -->			
				{($quantity_discount.quantity|intval*($p_unit |round:2))|string_format:"%.2f"} €
			</td>
		</tr>
		{/foreach}
	</tbody>
	</table>
</div>

Je crois que c'est tout, si il y a des questions ou des améliorations contactez moi  ;)

  • Like 1
Link to comment
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...