THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

Est-il possible d'obtenir via une loop le prix d'une livraison pour un mode de livraison et un poids donné ?


devOption ➤ e-commerce et applications mobiles

Offline


Bonjour,

dans le fichier cart
j'initialise les prix d'une livraison pour un mode de livraison

<select id="cart-delivery" name="delivery">
   {loop type="delivery" name="deliveryLoop" country=$country_id}
   <option value="{$POSTAGE}~{format_money number=$POSTAGE symbol={currency attr="symbol"}}~{format_money number={{cart attr='total_taxed_price_without_discount'} + $POSTAGE} symbol={currency attr="symbol"}}" {if $ID == $delivery_id }selected="selected" {/if}>{$TITLE}</option>
   {/loop}
</select>

avec le javascript suivant

        $("select[name=delivery]").change(function(){
          var postage_delivery_module = $("select[name$='delivery']").val().split('~');
          $(".postage").html(postage_delivery_module[1]);
          $(".total-price > .price").html(postage_delivery_module[2]);
        });

Offline


Merci, mais votre méthode ne semble pas prendre en compte le poids du panier pour calculer le prix de livraison.

D'ailleurs, la loop delivery ne prend ni poids ni identifiant de module en argument.


devOption ➤ e-commerce et applications mobiles

Offline


le poids est pris du panier

la boucle delivery te renvoie l'ID, le TITLE du module, a toi de filtrer

Last edited by zzuutt (02-07-2015 15:03:46)

Offline


Le problème est que je n'ai pas de panier à disposition: j'ai besoin du prix de livraison de chaque produit dans une routine d'export du catalogue (cf feed.html)

De plus, la loop delivery ne me renvoie rien, avec ou sans country id. Voici le code que j'utilise:
{loop type="delivery" name="deliveryLoop"}
     TITLE: $TITLE
{/loop}

Last edited by matdev (02-07-2015 16:09:21)


devOption ➤ e-commerce et applications mobiles

Offline


il faut obligatoirement mettre 'country=l'id du pays' dans la boucle delivery

elle va te renvoyer les modules dispo pour cette destination
puis tu appelles
function getPostageAmount($areaId, $weight)
sur chaque module si cette function existe

a tester..... il y a peut etre mieux

Offline


Bonjour,

Même avez le country id renseigné, la loop delivery ne renvoi rien sad


devOption ➤ e-commerce et applications mobiles

Offline


Sans doute parce que tes modules de livraison ne sont pas correctement configurés. Sont ils bien associés aux zones de livraison ?


OpenStudio Toulouse

Offline


Oui le module colissimo est bien associé aux zones de livraison.

Autre problème, j'ai l'erreur suivante en allant dans Configuration -> Pays :
La valeur "" est invalide pour le paramètre "with_area" dans la boucle type: country, nom: country-not-in-any-zone


devOption ➤ e-commerce et applications mobiles

Offline


Bonsoir,
je fais remonter ce post car si j'ai bien réussi à intégrer le code donné par ZZUUTT,
le Total TTC est ok.

Par contre, je n'arrive pas à faire afficher la bonne valeur de $postage en dessous des produits,
qui affiche toujours 0.

Une piste ?

merci

Offline


Bon j'ai essayé divers choses,
je ne sais pas appeler : function getPostageAmount($areaId, $weight)

J'ai mis le code suivant :

{loop type="module" name="rt" id="$delivery_id" }
{loop type="delivery" name="deliveryLoop" country=$country_id}
{$POSTAGE} {$postageAmount}
{/loop}
{/loop}

ou {$POSTAGE} renvoi tout les montants des modules de livraisons
et {$postageAmount} renvoi toujours 0.

Je galère ..

Offline


vz777 wrote:

Bon j'ai essayé divers choses,
je ne sais pas appeler : function getPostageAmount($areaId, $weight)

J'ai mis le code suivant :

{loop type="module" name="rt" id="$delivery_id" }
{loop type="delivery" name="deliveryLoop" country=$country_id}
{$POSTAGE} {$postageAmount}
{/loop}
{/loop}

ou {$POSTAGE} renvoi tout les montants des modules de livraisons
et {$postageAmount} renvoi toujours 0.

Je galère ..


Je ne comprends pas

dans ton code c'est normal que $postageAmount = 0
il ne correspond a rien

la boucle delivery va te lister tous les modules pour la destination $country_id
elle va te renvoyer $POSTAGE qui correspond au prix du transport du module dont l'id est $ID

la boucle module ne sert a rien

Offline


Ah bon j'avais compris que $postageAmount était la variable ou était stocké $postage,
et utilisé pour le calcul "Total ttc" -> ligne 130 de cart.html :     {assign var="postageAmount" value=$postage }.

Peu importe, soit dans mon cas, la boucle delivery
{loop type="delivery" name="deliveryLoop" country=$country_id}
{$POSTAGE}
{/loop}

renvoi  systématiquement 4.5 8.5 0

Copie écran (dsl il manque un tout petit bout a droite)
http://imageshack.com/a/img924/1156/rovhIP.jpg
   
Le fait de sélectionner une valeur du select, n'est pas pris en compte

Offline


par defaut Thelia affiche le prix du transport le moins cher
dans ton cas 0
postageAmount ligne 130 correspond a cette valeur

si tu veux afficher les prix des differents moyens de transport
tu dois rajouter ma boucle dans le select ~ligne156

<select id="cart-delivery" name="delivery">
   {loop type="delivery" name="deliveryLoop" country=$country_id}
   <option value="{$POSTAGE}~{format_money number=$POSTAGE symbol={currency attr="symbol"}}~{format_money number={{cart attr='total_taxed_price_without_discount'} + $POSTAGE} symbol={currency attr="symbol"}}" {if $ID == $delivery_id }selected="selected" {/if}>{$TITLE}</option>
   {/loop}
</select>

cette boucle pre-calcul les montants pour chaque transport

j'ai choisi de mettre dans la valeur
le prix du transport ~ le prix avec le symbole de la monnaie ~ le prix total du panier + le transport avec le symbole


le javascript sert a recalculer les montant suivant le transporter choisit dans la liste en decoupant la valeur

$("select[name=delivery]").change(function(){
          var postage_delivery_module = $("select[name$='delivery']").val().split('~');  //decoupage de la valeur de l'option selectionne
          $(".postage").html(postage_delivery_module[1]);  //recup de la valeur avec le symbol et affectation du champ ~ligne171
          $(".total-price > .price").html(postage_delivery_module[2]); //recup du montant total et affection du champ ~ligne185
        });

dans ta boucle

VZ777 wrote:
Peu importe, soit dans mon cas, la boucle delivery
{loop type="delivery" name="deliveryLoop" country=$country_id}
{$POSTAGE}
{/loop}

renvoi  systématiquement 4.5 8.5 0

tu dois avoir 3 modes de transport eligible pour $country_id
un coutant 4.5
l'autre 8.5
et 0

Offline


La ligne total ttc est ok,
en fait ce sont ces lignes (~168/170) qui ne se mettent pas à jour et restent à 0 :

                            <td class="unitprice">{format_money number=$postage symbol={currency attr="symbol"}}</td>
                            <td class="qty">-</td>
                            <td class="subprice">{format_money number=$postage symbol={currency attr="symbol"}}</td>

Offline


pour mettre a jour tes lignes, il suffit de rajouter la class postage a tes 2 lignes

<td class="unitprice postage">{format_money number=$postage symbol={currency attr="symbol"}}</td>
<td class="qty">-</td>
<td class="subprice postage">{format_money number=$postage symbol={currency attr="symbol"}}</td>

Last edited by zzuutt (05-04-2016 18:57:25)

Offline


Youpi ça marche ! et merci.

Par contre, ça marche uniquement pour la France métro, mais dès que je change de pays,
tout reste à 0  et le calcul ne se fait pas.