THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

J'utilise actuellement l'attribut item_count de Cart Substitution pour ne passer à l'étape suivante que si le nombre de produits est un multiple de 4.
J'aurai besoin de faire évoluer cette règle en supprimant de cette règle les produits d'une rubrique ID = x du catalogue.
Est-ce possible?

Merci de votre aide smile

Last edited by naonedit (26-03-2020 08:19:03)

Offline


Je ne suis pas sur de comprendre. Tu peux détailler un peu ?


OpenStudio Toulouse

Offline


Bien sûr smile
J'avais un catalogue avec 4 rubriques de produits. Le colisage nécessite que ces produits devaient être assemblés par multiple de 4 (ce qui fonctionne bien actuellement).
J'ai ajouté une 5ème rubrique de produits qui peuvent être ajoutés au panier sans influence sur la règle de colisage sur les produits des 4 autres catégories.
J'aimerai donc ne pas prendre en compte le nombre de produits de la 5ème rubrique dans ma règle de colisage afin de permettre une commande du panier suivant :
- 4 produits parmi les 4 premières rubrique
- 1 ou plusieurs prosuits parmi la 5ème rubrique
J'espère avoir assez détaillé mon besoin
Merci

Last edited by naonedit (19-03-2020 17:22:52)

Offline


Bonjour ROADSTER31
Mon cas d'usage est-il réalisable en adaptant la règle de gestion mise en oeuvre ou bien un module de colisage existe t-il pour le réaliser ? (je n'ai pas trouvé ce type de module sur http://modules.thelia.net/)
Merci par avance.

Offline


Je suppose que tu peux adapter ta règle de gestion. Mais comme je ne la connais pas (je ne sais pas comment tu l'as implémenté), je ne peux t'en dire plus.


OpenStudio Toulouse

Offline


Voici la règle actuellement  implémentée dans le template cart.html

{if {cart attr='item_count'} % 4 == 0}
    <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}
    {loop type="content" name="package-composition" id="435"}<a href="{$URL}" target="_blank"><span class="btn btn-primary pull-right"><i class="fa fa-chevron-right"></i> {intl l="Invalid quantity of product"}</span></a>{/loop}			   
{/if}

Offline


Pour aboutir à ton résultat, tu vas devoir déterminer à quelle catégorie appartient un produit du panier. Les substitutions ne te remontent pas cette information donc il faut passer par les boucles ({loop type='cart' ...}, {loop type ='product' ..})

Essaie quelque chose de cette nature :

{$nb_item_pack = 0 }
	{loop type='cart' name='panier'}
		{loop type='product' name='produit' id=$PRODUCT_ID}
			{if $DEFAULT_CATEGORY == n} {* n étant l'id de la categorie des produits devant être commandé par 4 *}
			{$nb_item_pack = $nb_item_pack + 1}
		{/if}
	{/loop}
{/loop}

{if $nb_item_pack % 4 == 0}
	<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}
	{loop type="content" name="package-composition" id="435"}
		<a href="{$URL}" target="_blank">
			<span class="btn btn-primary pull-right"><i class="fa fa-chevron-right"></i> {intl l="Invalid quantity of product"}</span>
		</a>
	{/loop}
{/if}

Last edited by Nog (24-03-2020 15:08:53)

Offline


Merci beaucoup NOG pour ta proposition, je pense avoir compris le principe et ainsi ne pas compter la quantité d'article de ma catégorie 5, non soumise au colisage.
J'ai donc modifier le code pour la condition sur $DEFAULT_CATEGORY et également utiliser l'incrément $QUANTITY pour l'incrément de $nb_item_pack
Est-ce correct?

{$nb_item_pack = 0 }
	{loop type='cart' name='panier'}
		{loop type='product' name='produit' id=$PRODUCT_ID}
			{if $DEFAULT_CATEGORY == "1,2,3,4"}
			{$nb_item_pack = $nb_item_pack + $QUANTITY}
		{/if}
	{/loop}
{/loop}

Encore merci pour ton aide !

Offline


Bien vu pour $QUANTITY mais attention au contexte des boucles. Tel qu'écrit ta valeur $QUANTITY contient le nombre total de produit dans ton stock et non pas la quantité d'un produit donné dans le panier (un client peut en effet mettre au panier plusieurs fois le même produit).

Nous  y sommes presque : la comparaison de la valeur du $DEFAULT_CATEGORY" doit porter sur un tableau et non une chaîne. Il faut donc initialiser un tableau avec les ID des catégories concernés par les pack.

{$nb_item_pack = 0 }
{$packed_categories = [1,2,3,4] }
	{loop type='cart' name='panier'}
		{$qty = $QUANTITY } {* valeur disponible dans le contexte de la boucle cart, il faut la mémoriser pour utilisation ultérieure *}
		{loop type='product' name='produit' id=$PRODUCT_ID}
			{if in_array($DEFAULT_CATGEORY, $packed_categories)}
			{$nb_item_pack = $nb_item_pack + $qty}
		{/if}
	{/loop}
{/loop}

Last edited by Nog (25-03-2020 09:40:38)

Offline


Merci NOG pour tes précisions sur le contexte des boucles.
J'ai du modifier la règle pour fonctionner en exclusion car DEFAULT_CATEGORY ne gère pas les rubriques imbriquées i.e ce n'est pas un équivalent d'un "ROOT CATEGORY"

{$nb_item_pack = 0}
	{loop type='cart' name='panier'}
		{$qty = $QUANTITY}
		{loop type='product' name='produit' id=$PRODUCT_ID}
			{if $DEFAULT_CATEGORY != 106}
				{$nb_item_pack = $nb_item_pack + $qty}
		{/if}
	{/loop}
{/loop}

Cela fonctionne parfaitement.
Un grand merci !

Offline