THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonsoir,
je voudrais pouvoir limiter la quantité d'achat d'un produit a X par panier.

J'ai donc essayé avec "if $product_id == idduproduit" au niveau des input sur la page product.html mais ça marche pas.

A l'aide !

Offline


J'ai regardé un peu à droite à gauche,
il me semble que la solution doit être de passer par du javascript ?

Si c'est le cas je suis dans la m...

Offline


Bonsoir, tu trouveras peut-être une solution ou un début de solution ici : http://forum.thelia.net/viewtopic.php?id=13357

Offline


Bonsoir Nog,
et merci,
ce fil je l'avais regardé reregardé etc,
bon j'ai fait ça encore une fois et puis j'ai trouvé ça qui m'a l'air d'être ok ( à confirmer ? )  :

{$test = 0}
{$prod_presente = 0}

{loop type="cart" name="carttest"}

	{loop type="product" name="produitpresent" id=$PRODUCT_ID}
		{if $PRODUCT_ID == 1}
		{$prod_presente = 1}
		{/if}
	{/loop}

	{if $prod_presente == 1 && $QUANTITY == 1}
	{$test = 1}
	{/if}
{/loop}

...

{if $test && $prod_presente}
on continue
{else}
on renvoie une erreur
{/if}

Par contre, sur la page produit j'aurais aimé que lorsque le produit a été ajouté au panier,
le form disparaisse ou du moins qu'on ne puisse l'ajouter une deuxieme fois.
Pour ça, j'imagine qu'il faudrait du javascript ?

Last edited by vz777 (28-03-2020 00:14:00)

Offline


Hummmm, dans la boucle cart tu peut directement obtenir la quantité d'un produit donné, donc tu peux te passer de ta variable $prod_presente ;-).

Concernant la page produit l'idéal serait de coder un module qui empêcherait l'ajout du produit si celui-ci est déjà présent dans le panier.

En l'absence de module l'approche la plus simple est d'utiliser le code précédent au niveau de la fiche produit pour masquer le formulaire.

Le template default de Thelia effectue un appel AJAX pour ajouter un produit au panier (depuis la page  produit ou l'aperçu rapide).  Il faudra donc à la fin de cet appel faire les tests pour masquer le formulaire d'ajout.

Offline


Ok, bon je vais réessayer sans la $prod_presente mais lors de mes tests d'hier, ça me renvoyait pas la donnée correctement,
je crois $QUANTITY juste dans la loop cart me renvoyait le stock du produit, et non pas la quantité du produit dans le panier.

Pour ce qui est de l'ajax, je vais regarder mais je pense que je suis incapable d'écrire de l'ajax proprement wink alors je finirais certainement par laisser tomber.
Bon bon je vais déjà essayer.

Merci

Offline


$QUANTITY dans la boucle produit renvoie effectivement le stock de produit. Dans la boucle cart cette variable renvoie le nombre d'un produit donné dans le panier.

Pour les appels AJAX tu peux utiliser cette librairie : axios si tu ne passe pas par jQuery (déjà dispo dans Thelia).

Offline


Je suis particulièrement nul en js, jquery, et tout ça.
L'hébreu ancien serait plus facile à lire pour moi donc ...

Je pense que ce bout de code devrait fonctionner, mais je ne sais mm pas si il est bon et ou le placer.

if ($this->product_id == 1){

    foreach ($cartItems as $cartItems)
    {
        if ($cartItems['id_product'] == 1) {
            $produitLimiterQuantity = $cartItems['quantity']+$limitesurqty;
        }
    }

    if ($limitesurqty >=1) {
        $this->errors[] = sprintf(Tools::displayError('Vous ne pouvez pas commander plus 1 $titlet' , false), $limitesurqty);    
     }

Dans /assets/src/js/thelia.js, j'ai essayé juste après la ligne 471

pse_id  = $("input.pse-id",this).val();

mais soit il y a une erreur dans le morceau de code, soit c'est pas au bon endroit.

Offline


Ton premier bloc de code est dans quel fichier ? Tu ne peux pas mixer du PHP et du javascript.

Offline


Le fameux premier bloc de code, j'ai été justement le mettre dans thelia.js ... y a de quoi rigoler ...

Offline


Bon je suis donc allé chercher des infos sur jquery.
je crois que j'ai réussi à écrire correctement mon test sur l'id product,
mais certainement pas au bon endroit.
Donc dans thelia.js, ligne 468 :

 
        $(document).on('submit.form-product', '.form-product', function () {
            if (doAjax) {
                var url_action  = $(this).attr("action"),
                    product_id  = $("input[name$='product_id']",this).val(),
                    pse_id  = $("input.pse-id",this).val();
                    quantity =$(input[name$='quantity]",this,val(), --> ça je n'ai mm pas testé je ne sais pas si on l'écrit comme ça

				if ( product_id == 1 ) {
					$("submit.form-product").click(function(){
						$(".form-product").hide();
					});
				}

...