Deux approches possibles :
1) Écrire un module, qui permet de limiter le nombre de produits achetés par client. Tu trouveras de la documentation pour développer ici : http://doc.thelia.net/. Bon, il faut se plonger dans le code, ce qui n'est pas forcément évident.
2) Utiliser un peu de code Smarty et les fameuses boucles Thelia dans ton template pour compter, pour le client connecté, le nombre de produits achetés sur la dernière année, et interdire la validation du panier ou la mise au panier s'il dépasse un certain nombre. Pour ce faire, on va utiliser une boucle "order" pour trouver les commandes passées du client, et une boucle order_product pour compter les produits, et aussi une boucle "cart" pour compter les produits déjà dans le panier.
Par exemple, dans la page product.html, pour interdire la mise au panier du produit affiché, tu peux utiliser le code suivant, qui vérifier que le nombre de produits dans le panier + le nombre de produits déjà commandés n'excède pas 20 :
{$nbProduits = 0}
{* Les produits du panier *}
{loop type="cart" name="lepanier"}
{if $REF == {product attr='ref'}}
{$nbProduits = nbProduits + $QUANTITY}
{/if}
{/loop}
{* Les produits dejà commandés dans le passé *}
{loop type="order" name="commandes" status_code="paid,processing,sent"}
{* Déterminer si la commande a été passée dans les 365 derniers jours *}
{if ((time() - $CREATE_DATE->getTimestamp()) / 86400) < 365}
{loop type="order_product" name="produits-commandes" order=$ID}
{if $REF == {product attr='ref'}}
{$nbProduits = nbProduits + $QUANTITY}
{/if}
{/loop}
{/if}
{/loop}
{* Ne pas afficher la form d'ajout au panier (vers la ligne 175 de product.html) si le nombre de produits achetés est > 20 *}
{if $nbProduits <= 20}
{form name="thelia.cart.add" }
...
{/form}
{/if}
Autre possibilité dans la page panier: pour interdire la validation du panier si le client a déjà acheté plus de X produits, on va compter le nombre de produits déjà commandés par le client, et vérifier que le total commandé + ceux dans dans le panier n'excède pas 20, toutes références confondues :
{$nbProduits = 0}
{$listeRef = []}
{loop type="cart" name="lepanier"}
{$listeRef[] = $REF}
{/loop}
{loop type="order" name="commandes" status_code="paid,processing,sent"}
{* Déterminer si la commande a été passée dans les 365 derniers jours *}
{if ((time() - $CREATE_DATE->getTimestamp()) / 86400) < 365}
{loop type="order_product" name="produits-commandes" order=$ID}
{if in_array($REF, $listeRef)}
{$nbProduits = nbProduits + $QUANTITY}
{/if}
{/loop}
{/if}
{/loop}
{* Afficher le bouton de commande (vers la ligne 244 de cart.html si moins de 20 produits ont déjà été commandés *}
{if $nbProduits <= 20}
<a href="{url path="/order/delivery"}" class="btn btn-primary pull-right"><i class="fa fa-chevron-right"></i> {intl l="Proceed checkout"}</a>
{else}
< class="pull-right">Didon ! Pas plus de 20 produits !</p>
{/if}
- Des infos sur Smarty : https://www.smarty.net/docs/en/
- $CREATE_DATE est un objet DateTime ( http://php.net/manual/fr/datetime.gettimestamp.php ), qu'on peut manipuler dans Smarty. (time() - $CREATE_DATE->getTimestamp()) / 86400) est une manière à peu près correcte pour calculer le nombre de jours entre la création d'une commande et aujourd'hui.
La doc des boucles utilisées :
- http://doc.thelia.net/en/documentation/loop/order.html
- http://doc.thelia.net/en/documentation/ … oduct.html
- http://doc.thelia.net/en/documentation/loop/cart.html
La doc des substitutions "produit" : http://doc.thelia.net/en/documentation/ … oduct.html
Attention, je n'ai pas testé ce code, il se peut que j'ai laissé (involontairement) des erreurs.