Jump to content
Tintin1538

Ajouter "Encore X Euros avant la gratuité de la livraison" dans le bloc panier

Recommended Posts

Bonjour à tous,

 

J'ai parcouru le forum, mais je n'arrive pas à trouver une réponse à ma question:

 

Je souhaiterai ajouter une ligne dans le bloc panier, qui dirait "Encore x € avant la gratuité de la livraison", ou quelque chose comme ca...

 

Je suppose que je ne suis pas le premier à vouloir rajouter cette ligne, et toute aide serait la bienvenue! :)

 

Merci pour votre aide!

 

Martin.

Share this post


Link to post
Share on other sites

Si je ne me trompe pas, tu doit trouver le morceau de code dans le fichier shopping-cart.tpl pour l'affichage (page panier).

Et il faudra aussi surement regarder dans le fichier CartController.php pour envoyer les bonnes données à smarty.

Share this post


Link to post
Share on other sites

Bonsoir à tous !

Je relance le sujet, je suis en 1.4.7. je n'ai pas trouvé le "morceau de code" du shoppingcart.tpl et le "Et il faudra aussi surement regarder dans le fichier CartController.php pour envoyer les bonnes données à smarty." ne m'a pas non plus inspiré !! :) Merci d'avance si vous avez une idée. Merci !

Share this post


Link to post
Share on other sites

Bonjour,

 

apparement l'affichage de cette fonction est prévue sur le shopping-cart.tpl (class="cart_free_shipping").

Pour l'activer, il faut définir le montant minimum depuis le back-office :

 

- Onglet "transport" / rubrique "manutention" (1er cadre en haut de page), puis indiquez un montant à partir duquel la gratuité s'opérera dans le champ "Frais de port offerts à partir de = (le montant souhaité)"

 

Une fois activée, un texte voisin de celui que vous souhaitez, s'affichera en dessous du total du shopping-cart

 

Ce constat a été effectué sous version 1.4.8.2. Reste à vérifier la présence de cette variable sous votre version 1.4.7.

 

Cordialement

AH

Share this post


Link to post
Share on other sites

Bonjour,

Merci pour votre réponse !

Le problème c'est que cela agit pour tous les transporteurs et pas uniquement cuit par défaut.

J'offre la livraison à partir de 59€ pour la France mais pas pour le reste du monde. Avec cette méthode quel que soit le pays de destination, la livraison est gratuite dès 59€. Même si j'ai spécifié les bon frais de port dans les "frais par transporteur"

Cordialement

Share this post


Link to post
Share on other sites

j'ai le même soucis et je n'ai pas trouvé de solution pour restreindre cette fonction à des zones géographiques

Share this post


Link to post
Share on other sites

Hello,

 

peu être un début de piste, voici ce que j'ai dans mon schopping-cart.tpl

 

{if sizeof($discounts)}
 <tbody>
 {foreach $discounts as $discount}
  <tr class="cart_discount {if $discount@last}last_item{elseif $discount@first}first_item{else}item{/if}" id="cart_discount_{$discount.id_discount}">
<td class="cart_discount_name" colspan="3">{$discount.name}</td>
<td class="cart_discount_price"><span class="price-discount">
 {if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if}
</span></td>
<td class="cart_discount_delete">1</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">
 {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'}">{l s='Delete'}</a>{/if}
</td>
  </tr>
 {/foreach}
 </tbody>
{/if}

 

Je pense qu'il s'agit de la partie qui calcul le fonctionnement des promotions, et donc exemple une promotion de livraison gratuite .

 

Reste plus qu'a trouver comme faire pour indiquer le message suivant :

 

Il vous reste x Euro pour bénéficier de la promo " livraison gratuit X " et de faire en sorte qu'il fasse le calcul à afficher

 

Donc en gros assigner une valeur dans une variable qui sera calculer par un code php ou smarty...du style valeur du bon de réduction - valeur du panier = x ( si x = " a " alors .... sinon ... ).

 

Si quelqu'un sait mettre cela en place sa sera parfait ;)

Edited by utaku (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

je suis intéressé également par cette possibilité à ceci près que j'aimerai que cette information apparaisse dans le panier et non pas seulement lorsque l'on affiche le contenu de son panier.

 

A titre d'exemple j'ai trouvé cette possibilité sur le site

 

Si un module payant fais cela, je suis partant.

 

Merci.

Share this post


Link to post
Share on other sites

As-tu trouvé une solution ? Je recherche exactement ce même type de système à mettre en place sur une version 1.5 :

Encore X€ d'achat pour bénéficier de la livraison gratuite

 

Merci pour vos réponses.

Share this post


Link to post
Share on other sites

Bonjour,

 

je viens d’implémenter cette phrase sur un de mes projets, mais je ne gère pas le TTC / HT pour l'instant ( BtoC).

 

Je vous partage donc ma solution pour le TTC

 

Fichier /override/classes/Cart.php (cf pj)

 

j'ai rajouté une fonction getFreeShipping()

pour l'instant je ne vérifie que si on utilise la gratuité des frais de port selon un prix (et non un poids)

 
Je surcharge la fonction getSummaryDetails([...]) pour y ajouter 'amount_left_free_ship' => $this->getFreeShipping(), dans le retour de l'array.
 
 
Fichier /themes/themeName/js/cart-summary.js (cf pj)
 
Ligne 731 rajouté
$('#amount_left_shipping').html(formatCurrency(json.amount_left_free_ship, currencyFormat, currencySign, currencyBlank));

"amount_left_shipping" étant l'id de la balise html que nous allons édité lors d'ajout/suppression de produit panier (et quantité)

 

Fichier themes/themeName/shopping-cart.tpl

 

Il faut rajouter cette ligne la ou vous souhaitez voir apparaitre cette mention.

<span class="amount_left" >{l s='remaining  of purchase to get free shipping'} : <span id="amount_left_shipping">{displayPrice price=$amount_left_free_ship}</span> </span>

Cart.zip

cart-summary.zip

Edited by Myst26 (see edit history)

Share this post


Link to post
Share on other sites

@Myst26 :

merci beaucoup pour le bout de code, mais est ce qu'il est valable si je veux avoir dans le blockcart la mention : 

frais de port offerts dans x€ : bien sur j'ai la version 1.5.3 et aussi le "x" doit se mettre à jour en ajax.

merci beaucoup

Share this post


Link to post
Share on other sites

Oui, récupére l'override de Cart.php

 

et dans le module blockart, fichier blockart.php rajouter vers la ligne 129

'amount_left_free_shipping' => Tools::displayPrice($params['cart']->getFreeShipping()),

Ensuite dans le fichier blockcart-json vers la ligne 101

"productTotal": "{$product_total|html_entity_decode:2:'UTF-8'}",
"amountLeftFreeShipping":"{$amount_left_free_shipping|html_entity_decode:2:'UTF-8'}",

Fichier ajax-cart.js, il faut remplacer :

if (parseFloat(jsonData.shippingCostFloat) > 0 || jsonData.nbTotalProducts < 1)
			$('.ajax_cart_shipping_cost').text(jsonData.shippingCost);
		else if (typeof(freeShippingTranslation) != 'undefined')
				$('.ajax_cart_shipping_cost').html(freeShippingTranslation);

par

if (parseFloat(jsonData.shippingCostFloat) > 0 || jsonData.nbTotalProducts < 1){
			$('.ajax_cart_shipping_cost').text(jsonData.shippingCost);
			$('.ajax_cart_remaining_amount_ship').text(jsonData.amountLeftFreeShipping);
			// peut etre mettre formatCurrency(json.amount_left_free_ship, currencyFormat, currencySign, currencyBlank) à la place de jsonData.amountLeftFreeShipping sinon on aura pas la devise
		}else if (typeof(freeShippingTranslation) != 'undefined'){
				$('.ajax_cart_shipping_cost').html(freeShippingTranslation);
                                $('.ajax_cart_remaining_amount_ship').hide();
		}

Dans le fichier tpl blockcart.tpl

 

il faudra juste rajouter la ou tu le souhaites :

frais de port offerts dans <span class='ajax_cart_remaining_amount_ship'>{convertPrice price=$amount_left_free_shipping}</span>
Edited by Myst26 (see edit history)

Share this post


Link to post
Share on other sites

merci pour la réponse, j'ai testé et disons que ça marche à 80%.

il y a toujours style="display: none;" dans <span class='ajax_cart_remaining_amount_ship'>

aussi lorsqu'on atteint le montant pour que les frais de port soit gratuit donc normalement on voit 0€ même dans firebug.

Share this post


Link to post
Share on other sites

Je n'ai pas testé le code donc je t'avouerai que ce n'est pas une solution 100% ! :P

Essaie de rajouter $('.ajax_cart_remaining_amount_ship').show() comme :

$('.ajax_cart_remaining_amount_ship').text(jsonData.amountLeftFreeShipping);
$('.ajax_cart_remaining_amount_ship').show()

Ici dés lors que les frais de port sont gratuit cela retire la mention.

Share this post


Link to post
Share on other sites

donc si par exemple il reste 3€ et on atteint les frais de port, et on ajoute par exemple un produit de 10 euro.

automatiquement le display:none vient et dans firebug, il y a toujours il reste 3€.

autre chose, si par exemple, je supprime un produit du panier, c'est à dire j’enlève un produit de 10 €, donc normalement ça devrait ettre : frais de port offert dans 13 € ( 3€ et 10 du produit), mais non, il reste toujours en display:none

Share this post


Link to post
Share on other sites

donc si par exemple il reste 3€ et on atteint les frais de port, et on ajoute par exemple un produit de 10 euro.

automatiquement le display:none vient et dans firebug, il y a toujours il reste 3€.

autre chose, si par exemple, je supprime un produit du panier, c'est à dire j’enlève un produit de 10 €, donc normalement ça devrait ettre : frais de port offert dans 13 € ( 3€ et 10 du produit), mais non, il reste toujours en display:none

 

remet à l'état initial ton fichier ajax-cart.js

 

 

et rajoute vers la ligne 598 (function  updateCartEverywhere de ton fichier js)

$('.ajax_cart_remaining_amount_ship').text(jsonData.amountLeftFreeShipping);

la condition est peut etre pas verifié.

Si cela se met à jour alors fait des conditions sur jsonData.amountLeftFreeShipping

 

si il est > 0 : $('.ajax_cart_remaining_amount_ship').show() sinon $('.ajax_cart_remaining_amount_ship').hide()

Edited by Myst26 (see edit history)

Share this post


Link to post
Share on other sites

j'ai ajouter seulement cette ligne : 

et rajoute vers la ligne 598 (function  updateCartEverywhere de ton fichier js)

$('.ajax_cart_remaining_amount_ship').text(jsonData.amountLeftFreeShipping);

 

maintenant tout va bien , seulement, lorsque j'atteint le montant de gratuité, il me met : frais de port offert dans "1"

sinon, dans les deux sens ( diminution ou augmentation) ça se calcule trés bien.

Share this post


Link to post
Share on other sites

ok. c'est normal, la function getFreeShipping() renvoie true si c'est gratuit.

D'ailleurs cela va poser un problème...  car si il reste1€ d'achat cela être ambigu avec le js qui ne fera pas de différence ...

 

remplace la function du fichier Cart.php getFreeShipping par

	public function getFreeShipping()
	{
		
		if(Configuration::get('PS_SHIPPING_FREE_PRICE') > 0):
			if($this->getOrderTotal(true,Cart::BOTH_WITHOUT_SHIPPING) < Configuration::get('PS_SHIPPING_FREE_PRICE')):
				return Configuration::get('PS_SHIPPING_FREE_PRICE') - $this->getOrderTotal(true,Cart::BOTH_WITHOUT_SHIPPING);
			endif;
			return -1;
				 
		elseif(Configuration::get('PS_SHIPPING_FREE_WEIGHT') > 0):
			//see for free shiping based on weight.
		endif;
		
		return false;
		
	

Elle retournera -1 si les frais de port sont gratuit.

 

Du coup dans ton fichier ajax-cart.js tu ajoutes aprés

$('.ajax_cart_remaining_amount_ship').text(jsonData.amountLeftFreeShipping);

if(jsonData.amountLeftFreeShipping < 0)
   $('.ajax_cart_remaining_amount_ship').hide()
else
   $('.ajax_cart_remaining_amount_ship').show()

Share this post


Link to post
Share on other sites

peux tu tester

console.log(jsonData.amountLeftFreeShipping);
if(jsonData.amountLeftFreeShipping < 0){
   $('.ajax_cart_remaining_amount_ship').hide()
console.log('hide');
}else{
   $('.ajax_cart_remaining_amount_ship').show()
console.log('show');
}

Share this post


Link to post
Share on other sites

@maz0193

 

tu le met aprés ca dans ajax-cart.js

//update general cart informations everywhere in the page
	updateCartEverywhere : function(jsonData) {
		$('.ajax_cart_total').text($.trim(jsonData.productTotal));

//ICI

Share this post


Link to post
Share on other sites

rien ne se passe, mais bon j'ai une autre idée.

si j’enlève le return -1; comme ça, lorsque le prix de la gratuité est atteint, le prix s'effacera et il me reste : (frais de port offerts 

dans )
et c'est ça le hic, c'est que soit il me faut afficher 0 € donc je doit mettre return 0;
soit il me faut une règle dans ajax-cart.js pour cacher le "dans" pour ne laisser que (frais de port offerts ) ou mieux cacher toute la ligne  (frais de port offerts dans ) et afficher une nouvelle ligne : (vos frais sont offert !).

Share this post


Link to post
Share on other sites

Salut,

Largement inspiré de ce post, j'ai fait les modifs qui prennent en compte les règles de panier, et non plus le port gratuit pour tout le monde. 

vous les trouverez ici

@+

pdriss

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More