Jump to content

Ajouter un produit au panier avec un attribut modifié


Recommended Posts

Bonjour,

 

J'ai commencé à toucher Prestashop il y a 3 semaines donc je découvre encore ce CMS et mon problème pourrait se révéler très simple, je ne sais pas.

 

Je développe actuellement une module qui affiche des produits supplémentaires en bas de la page du panier ( shopping-cart.tpl ).

 

Sur ces fiches produits j'aimerai mettre un bouton "Ajouter au Panier" avec l'option de choisir sa taille, car les produits sont des vêtements.  

 

Pour moi l'idéale serait de faire passer les paramètres dans l'URL    ( ?id_product=x&taille=y ) mais d'après ce que j'ai compris il faut lier un attribut avec un produit grâce à une "Combinaison" ? Je n'ai pas bien saisi l'idée.

 

J'ai également essayé l'ajax, ajaxCart.add() et le produit va dans le panier, mais la taille est celle par défaut.

 

Est-ce que quelqu'un aurait une solution ?

 

Merci beaucoup :)

Link to comment
Share on other sites

Bonjour,

Je pense qu'il faut que tu liste les attributs de ton produits, puis d'un ajouter id_product_attribut dans ton url.

Au pire en ajax tu peux le faire aussi.

En jettant un oeil au ajax-cart.js du theme par defaut, on peux voir 2 manières différent d'ajouter un produits

ajaxCart.add(idProduct, null, false, this);

Je pense que c'est pour un produit "simple"

ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);

et ça pour un produit avec combinaison.

Tu peux récupérer uniquement les ids de tes attributs d'un produit avec la methode getProductAttributesIds() de l'objet Product

 $attributes = $ProductOBJ->getProductAttributesIds($product['id_product'],true);

J'espère que j'ai pu t'aider.

Link to comment
Share on other sites

Je tiens à vous remercier pour votre réponse, cela m'a pas mal aidé mais ma seule problème, c'est les combinaisons.

 

J'ai tenté de copier la page produit.tpl, en utilisant des input hidden pour ensuite envoyer mes paramètres et en appelant ajaxCart.add();

<form action="{$link->getPageLink('cart')}" method="post">
	<input type="hidden" name="token" value="{$static_token}" />
	<input type="hidden" name="quantity" id="quantity" value="1" />
	<input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
	<input type="hidden" name="add" value="1" />
	<input type="hidden" name="id_product_attribute" id="idCombination" value="" />
	<a type="submit" class="button_large ajax_add_to_cart_button">
	    {l s='Add to Cart'}
	</a>
</form>

J'ai un attribut "Taille" avec des valeurs telles que "L", "M" et "S". 

 

Est-ce que vous saurez comment créer une combinaison pour l'attribut "Taille" ?

 

Car, si je ne me trompe pas, c'est grâce à la combinaison qu'on peut ajouter un produit avec des attributs au panier.

 

Il me semble que qu'il y a une fonction addCombination(), mais je ne l'ai pas trouvé.

 

Merci beaucoup,

Link to comment
Share on other sites

Alors, 

pour recuperer ça il faut cibler l'element, 

je vous conseille de mettre un ID à l'élément qui a l'id de la combinaisons du produit, 

en suite avec jquery ça reste très simple.

Par exemple pour un select

<select id="id_product_attribute">
 <option value="1">Bleu</option>
 <option value="2">Rouge</option>
</select>


et on récupere avec jquery

$(function(){
 $('#id_product_attribute').val();
})

et la on retrouve l'id de l'attribut qu'on a plus qu'a placer de le ajaxCart.add...

je viens de le faire pour un de mes modules et ça fonctionne

Cordialement

Link to comment
Share on other sites

Bonjour,

@guigi23, en fait la différence ce n'est pas pour produit "simple"/ produit combiné, mais pour la page sur laquelle a lieu l'ajout au panier.

Sur toutes les pages autre que celle de la page principale produit, il n'y a pas besoin de l'id combinaison car c'est celle par défaut qui est ajoutée. Le choix des déclinaisons composant une combinaison spécifique a lieu sur la page principale du produit.

 

@WebmasterManelli

""Est-ce que vous saurez comment créer une combinaison pour l'attribut "Taille" ?""

Via BO>Catalogue>Produit pour créer une combinaison.

 

Ensuite pour ajouter une combinaison comme l'explique guigui23, vous n'avez plus qu'à récupérer $('#id_product_attribute').val();

Par contre pas besoin de mettre un ID à un élément, car l'élément #id_product_attribute existe déjà, c'est un des hidden input du form.

Link to comment
Share on other sites

Merci pour vos réponses, j'ai essayé la solution proposé par Yopixel, mais quand je rafraichi la page, la taille est celle par défaut.

 

J'ai deux questions : 

 

    - Comment récupérer la valeur de l'ID combinaison pour le mettre dans la balise nécessaire ?

 

    - Est-ce la valeur id_product_attribute dans la table "product_attribute_combination" ?

 

Voici les differents élements de mon code :

 

Fonction javascript : 

$('.ajax_add_to_cart_button').on('click', function(){
		ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity').val(), null);
	});

Fiche Produit :

$pro -> Le produit

$productSizes -> Listes des tailles du produit

La "value" de l'input #idCombination et la valeur écrite en dur de "id_product_attribute" d'un produit.

<div class="similarproducts-product">
			<h3>
				{$pro->name[1]}
			</h3>
			<img src="{$productImages[$key]}" alt="Image Produit">
			<br>
			<br>
			<span class="similar-price">{convertPrice price=$pro->price}</span>
			<br>
			<div class="attributes">
				<div class="size-wrapper">
					{if (($productSizes[$key]|@count) > 0)}
					<select name="$productSizes[0].group" id="attribute_select_{$key+1}" class="attribute_select">
						{foreach $productSizes[$key] as $size}
							<option value="{$size.id_attribute|intval}" title="{$size.group}">{$size.attribute}</option>
						{/foreach}
					</select>
					{/if}
				</div>
				<form action="{$link->getPageLink('cart')}" method="post">
					<input type="hidden" name="token" value="{$static_token}" />
					<input type="hidden" name="quantity" id="quantity" value="1" />
					<input type="hidden" name="id_product" value="{$pro->id|intval}" id="product_page_product_id" />
					<input type="hidden" name="add" value="1" />
					<input type="hidden" name="id_product_attribute" id="idCombination" value="2764"/>
					<a class="ajax_add_to_cart_button button_large" rel="{$pro->id}">
						{l s='Add to Cart'}
					</a>
					
				</form>
			</div>
		</div><!-- similarproducts-product -->

Est-ce que ce code vous paraît juste ? Ou est-ce qu'il y a une erreur de ma part ?

 

Merci,

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

""Merci pour vos réponses, j'ai essayé la solution proposé par Yopixel, mais quand je rafraichi la page, la taille est celle par défaut.""

 

Ce qui est normal, puisque le choix du visiteur est perdu. Il faut choisir à nouveau la taille pour que celle ajoutée au panier ne soit plus celle par défaut.

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...