Jump to content

Confusion Voucher / Cart Rule dans shopping-cart.tpl


Recommended Posts

Bonjour,

 

j'utilise Prestashop 1.6.0.8 et je souhaite affiche les bons de réduction actifs dans le panier (shopping-cart.tpl)

 

- J'ai créé une règle panier pour offrir les frais de port à partir de X € d'achat, activable par un code promo

- Ce code promo est bien mis en avant avec le formulaire sur la page

- Lorsque je saisi ce code promo, il est bien pris en compte car les frais de ports sont annulés à l'étape ultérieure du choix du transporteur, et le message de mis en avant du code promo disparaît.

- Pourtant, le code promo n'apparaît pas dans le panier, pour indiquer qu'il est bien actif, alors que dans le fichier template, tout est prévu pour qu'il s'affiche :

<tr class="cart_total_voucher" {if $total_discounts == 0}style="display:none"{/if}>
	{if sizeof($discounts)}
		{foreach $discounts as $discount}
				<td class="cart_discount_price" colspan="2">{$discount.name}</td>
				<td class="cart_discount_price">
					<span class="price-discount price">{if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if}</span>
				</td>
				<td class="price_discount_del text-center">
					{if strlen($discount.code)}
						<a
							href="{if $opc}{$link->getPageLink('order-opc', true)}{else}{$link->getPageLink('order', true)}{/if}?deleteDiscount={$discount.id_discount}"
							class="price_discount_delete"
							title="{l s='Delete'}">
							<i class="icon-trash"></i>
						</a>
					{/if}
				</td>
		{/foreach}
	{/if}
</tr>

Je précise qu'il ne s'agit pas d'un problème de display:none au niveau du <TR> puisque le <TR> apparaît vide dans le code source.

Plus étrange encore, lorsque j'affiche {sizeof($discounts)} quelque part dans le template, celui-ci retourne 0, ce qui signifie qu'aucun coupon n'est actif. Or le coupon est bien actif !!!!

 

 

Je suis en train de bricoler une solution de secours, en insérant dans la méthode initContent() de OrderController.php :

$this->context->smarty->assign('cart_rules', $this->context->cart->getCartRules(), array());

Mais j'ai l'impression de réinventer la roue... 

 

Quelqu'un aurait il une idée ?

 

Merci par avance !

Link to comment
Share on other sites

Bonjour,

 

Pourriez-vous tenter d'afficher le retour de

sizeof($discounts)

Avez-vous un override sur le OrderController.php ?

 

N'hésitez pas à faire des dumps de variable pour essayer de trouver l'erreur.

Et également à comparer les codes lorsque ça s'affiche correctement dans le backoffice.

Link to comment
Share on other sites

Bonsoir Nowis, 

merci de votre réponse.

Comme évoqué dans mon post, sizeof($discounts) renvoie 0.

Pour OrderController, j'ai un peu bidouillé (sans override), principalement les étapes ultérieures, pour combiner l'étape de saisie de l'adresse et du choix du transporteur sur une même page.

Link to comment
Share on other sites

Effectivement, désolé je n'avais pas vu que vous aviez testé...

 

Hum effectivement c'est très étrange.

 

- Pourriez-vous tenter de supprimer tous vos override temporairement ? (dans votre cas il faut remettre les fichiers par défaut... l'inconvénient de ne pas avoir faire d'override)

- Et également essayer avec le thème par défaut juste pour voir le résultat ?

 

Si l'affichage reste le même, cela vient d'un problème interne, sinon c'est que le thème ou vos modifications ont impacté l'affichage sur cette page.

Link to comment
Share on other sites

J'ai remis le fichier shopping-cart.tpl du thème par défaut et les controllers par défaut mais l'usage des vouchers n'est toujours pas clair.

Pas de formulaire de Voucher en étape 1, et le message indiquant la gratuité des frais de port après application du voucher ne s'affiche pas, car, par défaut, le transporteur gratuit est préselectionné.

Bref, après déplacement des modifications dans le dossier override/, retour à la bidouille !

Link to comment
Share on other sites

La solution à mon problème initial était le fait que comme le transporteur gratuit est sélectionné par défaut (configuration que je souhaite conserver), le voucher correspondant est considéré comme nul donc retiré de la liste des vouchers.

Ca se trouve dans le fichier classes/Cart.php à la ligne 2968, il faut commenter la condition ci-dessous :

/*
foreach ($cart_rules as $key => &$cart_rule)
    if ($cart_rule['value_real'] == 0)
        unset($cart_rules[$key]);
*/
Edited by koko85 (see edit history)
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...