Jump to content
Mat_

Afficher toutes les combinaisons

Recommended Posts

Bonsoir à tous !

Voilà, aujourd'hui ma boutique affiche dans la page produit, les produits associés sous le produit. Jusque là tout va bien.
Chaque produit associé a des menus déroulants pour sélectionner les déclinaisons. Ex :

Produit 1  -   Select pour la couleur  -  Select pour la taille  - Select pour la quantité
Produit 2  -   Select pour la couleur  -  Select pour la taille  - Select pour la quantité

Cette configuration n'est pas pratique du tout. J'aimerais que les clients puissent choisir plusieurs déclinaisons en même temps, c'est à dire un format :

Produit 1  -   Couleur 1  -  Taille 1  - Select pour la quantité
Produit 1  -   Couleur 1  -  Taille 2  - Select pour la quantité
Produit 2  -   Couleur 1  -  Taille 1  - Select pour la quantité
Produit 2  -   Couleur 2  -  Taille 1  - Select pour la quantité

En gros une ligne par combinaison.

Voilà le code que j'utilise pour le moment :

<div class="productlist_add">
<input type="hidden" name="actual_prod_id" id="actual_prod_id" value="{$association.id_product}" />

<input type="hidden" name="quantity_nocomb" id="quantitynocomb_{$association.id_product}" value="{$quantitynocomb_{$association.id_product[spam-filter]" />
{if $pricenocomb_{$association.id_product[spam-filter]
<input type="hidden" name="price_nocomb" id="pricenocomb_{$association.id_product}" value="{$pricenocomb_{$association.id_product[spam-filter]" />
{/if}
<input type="hidden" name="id_product_attribute" id="idCombination_assoc_{$association.id_product}" value="" />
{if ($association.id_category_default != $ex)}
			<h1>{$association.category_default}</h1>		
	{/if}
{assign var='ex' value=$association.id_category_default}

{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product_{$association.id_product}->getPrice(true, $smarty.const.NULL, 6)}
	
		{assign var='productPriceWithoutReduction' value=$product_{$association.id_product}->getPriceWithoutReduct(false, $smarty.const.NULL)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product_{$association.id_product}->getPrice(false, $smarty.const.NULL, 6)}
		{assign var='productPriceWithoutReduction' value=$product_{$association.id_product}->getPriceWithoutReduct(true, $smarty.const.NULL)}
	{/if}
	
	
	
	
	{assign var='ppe' value=($product_{$association.id_product}->getPriceWithoutReduct(true)|default:'null' - $product_{$association.id_product}->ecotax)|floatval}
	{assign var='ppi' value=($product_{$association.id_product}->getPriceWithoutReduct(false)|default:'null' - $product_{$association.id_product}->ecotax * (1 + $ecotaxTax_rate / 100))|floatval}
	

<input type="hidden" id="productPriceTaxExcluded_{$association.id_product}" value="{$ppe}" />
<input type="hidden" id="productPriceTaxIncluded_{$association.id_product}" value="{$ppi}" />
<input type="hidden" id="producttest_{$association.id_product}" value="" />
		
		<div id="short_description_content" class="rte align_justify" itemprop="description">{$association.name}</div>
	


	

	<div class="box-info-product">
	<div class="product_attributes clearfix">
		
		
			<!-- attributes -->
			<div id="attributes_{$association.id_product}" class="attributes">
			{if isset($groups_{$association.id_product}) && $groups_{$association.id_product[spam-filter]
			
				{foreach from=$groups_{$association.id_product} key=id_attribute_group item=group}
					{if $group.attributes|@count}
						<fieldset class="attribute_fieldset">
							<!--<label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'UTF-8'}&nbsp;</label>-->
							{assign var="groupName" value="group_$id_attribute_group"}
							<div class="attribute_list">
								{if ($group.group_type == 'select')}
									<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="form-control attribute_select_{$association.id_product} no-print">
										{foreach from=$group.attributes key=id_attribute item=group_attribute}
											<option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'html':'UTF-8'}">{$group_attribute|escape:'html':'UTF-8'}</option>
										{/foreach}
									</select>
								{elseif ($group.group_type == 'color')}
									<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="form-control attribute_select_{$association.id_product} no-print">
										{foreach from=$group.attributes key=id_attribute item=group_attribute}
											<option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'html':'UTF-8'}">{$group_attribute|escape:'html':'UTF-8'}</option>
										{/foreach}
									</select>
									{elseif ($group.group_type == 'radio')}
									<ul>
										{foreach from=$group.attributes key=id_attribute item=group_attribute}
											<li>
												<input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} />
												<span>{$group_attribute|escape:'html':'UTF-8'}</span>
											</li>
				{/foreach}
				
									</ul>
		{/if}
							</div> <!-- end attribute_list -->
						</fieldset>
					{/if}
				
				{/foreach}{/if}
			</div> <!-- end attributes -->
			<!-- quantity wanted -->
		{if !$PS_CATALOG_MODE}
		<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
			<select name="qty" id="quantity_wanted_{$association.id_product}" class="attribute_select_qty no-print"></select>
																			
		</p>
		{/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='The minimum purchase order quantity for the product is'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b>
		</p>
		
	</div> <!-- end product_attributes -->
	
					
</div>
<div class="content_availability clearfix">
<!-- availability or doesntExist -->
			<p id="availability_statut_{$association.id_product}"{if !$PS_STOCK_MANAGEMENT || ($product_{$association.id_product}->quantity <= 0 && !$product_{$association.id_product}->available_later && $allow_oosp) || ($product_{$association.id_product}->quantity > 0 && !$product_{$association.id_product}->available_now) || !$product_{$association.id_product}->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
				{*<span id="availability_label">{l s='Availability:'}</span>*}
				<span id="availability_value_{$association.id_product}" class="label{if $product_{$association.id_product}->quantity <= 0} label-warning{else} label-success{/if}">{if $product_{$association.id_product}->quantity <= 0}{if $PS_STOCK_MANAGEMENT && $allow_oosp}{$product_{$association.id_product}->available_later}{else}{l s='This product is no longer in stock'}{/if}{elseif $PS_STOCK_MANAGEMENT}{l s='Livré sous 48h'}{/if}</span>
			</p>
			{if $PS_STOCK_MANAGEMENT}
				{if !$product_{$association.id_product}->is_virtual}{hook h="displayProductDeliveryTime" product=$product_{$association.id_product[spam-filter]{/if}
				<p class="warning_inline last_quantities" id="last_quantities_{$association.id_product}"{if ($product_{$association.id_product}->quantity > $last_qties || $product_{$association.id_product}->quantity <= 0) || $allow_oosp || !$product_{$association.id_product}->available_for_order || $PS_CATALOG_MODE} style="display: none"{/if} >{l s='Warning: Last items in stock!'}</p>
			{/if}
			<p id="availability_date_{$association.id_product}"{if ($product_{$association.id_product}->quantity > 0) || !$product_{$association.id_product}->available_for_order || $PS_CATALOG_MODE || !isset($product_{$association.id_product}->available_date) || $product_{$association.id_product}->available_date < $smarty.now|date_format:'%Y-%m-%d'} style="display: none;"{/if}>
				<span id="availability_date_label_{$association.id_product}">{l s='Availability date:'}</span>
				<span id="availability_date_value_{$association.id_product}">{if Validate::isDate($product_{$association.id_product}->available_date)}{dateFormat date=$product_{$association.id_product}->available_date full=false}{/if}</span>
			</p>
			<!-- Out of stock hook -->
		<div id="oosHook_{$association.id_product}"{if $product_{$association.id_product}->quantity > 0} style="display: none;"{/if}>
				<!-- MODULE MailAlerts -->

	{if isset($email) AND $email}
		<p class="form-group">
			<input type="text" id="oos_customer_email_{$association.id_product}" name="customer_email_{$association.id_product}" size="20" value="{l s='your@email.com' mod='mailalerts'}" class="mailalerts_oos_email form-control" />
    	</p>
    {/if}
	<a href="#" title="{l s='Notify me when available' mod='mailalerts'}" id="mailalert_link_{$association.id_product}" rel="nofollow">{l s='Notify me when available' mod='mailalerts'}</a>
	<span id="oos_customer_email_result_{$association.id_product}" style="display:none; display: block;"></span>
		</div>
</div>
					
	<div class="content_prices clearfix content-price-3">
		
		
		{if $product_{$association.id_product}->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
			<!-- prices -->
			<div>
				<p id="old_pricebis" {if (!$product_{$association.id_product}->specificPrice || !$product_{$association.id_product}->specificPrice.reduction)} class="hidden"{/if}>{strip}
					{if $priceDisplay >= 0 && $priceDisplay <= 2}
						{hook h="displayProductPriceBlock" product=$product_{$association.id_product} type="old_price"}
						<span id="old_price_display_{$association.id_product}"><span>{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction|floatval}{/if}</span>{if $productPriceWithoutReduction > $productPrice && $tax_enabled && $display_tax_label == 1} {if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if}</span>
					{/if}
				{/strip}</p>
				<p class="our_price_display_{$association.id_product} price-block" itemprop="offers" itemscope itemtype="https://schema.org/Offer"  >{strip}
					{if $product_{$association.id_product}->quantity > 0}<link itemprop="availability" href="https://schema.org/InStock"/>{/if}
					{if $priceDisplay >= 0 && $priceDisplay <= 2}
					
						<span id="our_price_display_{$association.id_product}" class="price" itemprop="price" content="{$productPrice}">{convertPrice price=$productPrice|floatval}</span>
						{if $tax_enabled  && ((isset($display_tax_label) && $display_tax_label == 1) || !isset($display_tax_label))}
							{if $priceDisplay == 1} {l s='tax excl.'}{else} {l s='tax incl.'}{/if}
						{/if}
						<meta itemprop="priceCurrency" content="{$currency->iso_code}" />
						{hook h="displayProductPriceBlock" product=$product type="price"}
					{/if}
				{/strip}</p>
				{if $priceDisplay == 2}
					<br />
					<span id="pretaxe_price">{strip}
						<span id="pretaxe_price_display">{convertPrice price=$product_{$association.id_product}->getPrice(false, $smarty.const.NULL)}</span> {l s='tax excl.'}
					{/strip}</span>
				{/if}
			</div> <!-- end prices -->
			{if $packItems|@count && $productPrice < $product->getNoPackPrice()}
				<p class="pack_price">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
			{/if}
			{if $product->ecotax != 0}
				<p class="price-ecotax">{l s='Including'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for ecotax'}
					{if $product->specificPrice && $product->specificPrice.reduction}
					<br />{l s='(not impacted by the discount)'}
					{/if}
				</p>
			{/if}
			{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
				{math equation="pprice / punit_price" pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}
				<p class="unit-price"><span id="unit_price_display">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'html':'UTF-8'}</p>
				{hook h="displayProductPriceBlock" product=$product type="unit_price"}
			{/if}
		{/if} {*close if for show price*}
		{hook h="displayProductPriceBlock" product=$product_{$association.id_product} type="weight" hook_origin='product_sheet'}
        {hook h="displayProductPriceBlock" product=$product_{$association.id_product} type="after_price"}
		<div class="clear"></div>
	
		
		
	</div> <!-- end content_prices -->

					
</div><!-- end productlist_add -->

 

Pour être tout à fait honnête, je ne suis pas attaché à ce code, je peux tout changer sans soucis. Le problème c'est que je ne comprends pas la méchanique d'ajout au panier sur Presta.

Quels sont les inputs obligatoires ?

Quand je fais un test d'ajout de combinaisons, dans ma page commande j'ai des id du style : product_223_515_0_0

J'ai bien compris pour le premier 223 qui est l'id du produit et 515 sa variation que j'ai ajouté au panier, mais après ...

 

En soit réaliser un formulaire avec toutes les combinaisons est ok pour moi. Là où je bloque c'est donc la valeur que je dois ajouter aux input associés à ces lignes !
Une piste pour m'aider ?

 

Merci d'avance !!!

 

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