THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonsoir

Après avoir écumé le forum, scruté la base de données à la recherche du weight, essayé de comprendre les loops de la documentation et cassé mon site 100 fois, je viens encore demander de l'aide...
Mon problème : au vu d'une commande (réelle) de 145 € de produits et 175 € de frais de port (poids du colis 10kg 10 --> colissimo supérieure à 10kg et jusqu'à 30kg =175 €), je me dis qu'il serait quand même bien de prévenir le client qu'il peut rajouter des produits dans son panier pour des frais de port identiques....

La seule chose que j'ai trouvé, c'est comment afficher le poids d'un produit à la fois, c'est pas brillant ! 
Dans la boucle {loop type="cart" name="cartloop"}, sinon ça casse tout

{loop name="pse" type="product_sale_elements" product="$PRODUCT_ID"}								
{$WEIGHT}
{/loop}

Si quelqu'un pouvait me donner quelques pistes, merci

Offline

Offline


Bonjour Roadster et merci.

J'essaye en vain de créer une boucle à partir de order mais en vain... au mieux j'arrive à afficher les références de mes anciennes commandes ou rien ne s'affiche , au pire j'ai une page blanche...

En fait, je ne sais pas quoi mettre dans name et argument... il y aurait-il des explications plus détaillées autre part ?
name :  is used to reference this loop further in the page (see ifloop, elseloop or pageloop), je ne trouve pas les exemples ifloop ect et Google traduction ne m'aide pas beaucoup... il me semble comprendre que le name doit faire référence à peut être la boucle englobante...

Mes réflexions :  loop order est dans la boucle loop cart {loop type="cart" name="cartloop"}
Dans la table order, je n'ai pas encore ma commande puisque non validée et la seule chose dont je peux me servir et $customer_id puisque ce champ se trouve dans la table cart aussi.
Dans la table cart j'ai $id qui correspond à ma commande en cours et je suppose que je dois aller chercher dans la table cart_item ($cart_id = $id de la table cart) $product_id et $quantity pour calculer le $weight
Est ce que j'ai juste ?

Comment construire cette boucle ?

Dans la boucle loop cart j'arrive à récupérer {$ITEM_ID} {$QUANTITY}  {$PRODUCT_SALE_ELEMENTS_ID} mais comment s'en servir dans la boucle order ?

J'ai tenté aussi avec plusieurs name invoice.cart, invoice.order  et avec et sans id, etc... rien ne s'affiche
{loop name="invoice.cart" type="order" customer="$CUSTOMER_ID" id=$cart_id}                               
{$REF}{$CUSTOMER_ID} {$WEIGHT}
{/loop}

Offline


Pour name, tu met ce que tu veux. C'est type qui est important.

Pour la boucle order,  le parametre id doit être un order id ($order_id) , et pas un cart id.

Dans quel template tu veux l'afficher ce poids ?


OpenStudio Toulouse

Offline


Dans invoice, avant que le client finalise sa commande mais je veux bien le mettre aussi dans cart (ça me semble plus compliqué à cause de la possibilité de changer les quantités et le lieu de destination)

{loop name="afficher_poids" type="order" id=$order_id}                               
poids {$WEIGHT}
{/loop}

m'affiche le mot poids 6 fois... mais aucun poids. Pour le 6 je comprends, j'ai déjà commandé 6 fois avant.

Ce que je comprends moins c'est que tant que je n'ai pas validé ma commande, elle n'est pas physiquement dans la table order.

Last edited by cilou (09-10-2015 18:33:02)

Offline


Ce que je comprends moins c'est que tant que je n'ai pas validé ma commande, elle n'est pas physiquement dans la table order.

C'est normal, à ce moment là, il n'existe qu'un panier, et pas encore une commande, qui n'est crée qu'une fois que le paiement a été initié.

Ceci dit, il manque une substitution {cart attr='weight'}, qui sera présente dans la prochaine version.

D'ici là, tu peux modifier le fichier local/modules/TheliaSmarty/Template/Plugins/DataAccessFunctions.php. Tu trouveras vers la ligne 321 :

            case "total_vat":
                $result = $cart->getTotalVAT($taxCountry);
                break;

Ajoute juste après le code suivant :

            case "weight":
                $result = $cart->getWeight();
                break;

Tu pourras alors obtenir le poids avec la substitution {cart attr='weight'}


OpenStudio Toulouse

Offline


Un grand merci smile

Pour l'instant j'en étais à essayer d'utiliser {assign "weight" $WEIGHT}  dans une boucle product mais sans succès non plus !

{loop type="product_sale_elements" name="produit" product="$PRODUCT_ID"}
{$WEIGHT}
{assign "weight" $WEIGHT}
{/loop}

{loop name="afficher_poids" type="cart" id=$cart_id}                               
quantité {$QUANTITY} id_produit {$PRODUCT_ID}
poids : $weight
{/loop}

Cette substitution {cart attr='weight'} n'est pas encore dans la dernière version ?

Bon weekend

Offline


Ca marche bien mais... ça calcule bizarre...

J'affiche bien le poids de 1 produit, le poids de 2 * 1 produit différent mais si je change la quantité, ça devient vite très lourd...

Le code que j'ai mis finalement dans cart

{loop name="afficher_poids" type="cart" id=$cart_id}                               
{assign "total_poids"  {$QUANTITY} * {cart attr='weight'}}
{/loop}

poids : {$total_poids} kg

Pour tester (c'est une version dupliquée du site en ligne)
-http://www.boutik.cafe-chaulet.com/

Merci encore

Offline


Le total des poids de tous les articles présents dans le  panier, c'est  {cart attr='weight'}, pas besoin de le mettre dans une boucle et de faire des calculs alambiqués.

Poids:  {cart attr='weight'} kg

Et c'est tout.


OpenStudio Toulouse

Offline


Bonjour

Quel idiote je fais, pourquoi vouloir faire compliqué quand c'est si simple wink

Merci