THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Filtre poids

(31-03-2019 20:31:46)


Bonjour !

Je cherche à filtrer mes types de livraison :

Moins de 100gr -> Livraison lettre
Plus de 100gr -> Livraison colis

Le but etant d'afficher le bon mode de livraison en fonction du poids.

Y-a t'il une solution simple pour cela, que je n'aurai pas vue ?

Pour le moment, je récupère le poids grace à :

{loop type="order" name="order__weight"}{$WEIGHT}{/loop}

Mais je ne trouve pas comment faire ma comparaison (ici >0.1 qui est incorrect)

{if {loop type="order" name="order__weight"}{$WEIGHT}{/loop}>0.1}
                            Mode de livraison COLIS
{/if}

Comment faire un comparaison > ou < dans mon code ?

Merci !!!

Last edited by valentin121212 (31-03-2019 20:32:07)

Offline

#2 Re: Filtre poids

(31-03-2019 20:41:44)


Le plus simple est de passer par une variable intermédiaire :

{loop type="order" name="order__weight"}
    {$poids = $WEIGHT}
{/loop}

{if $poids > 0.1}
   Mode de livraison COLIS
{/if}

Tu peux aussi faire ton test directement dans la boucle :

{loop type="order" name="order__weight"}
    {if $WEIGHT > 0.1}
       Mode de livraison COLIS
    {/if}
{/loop}

OpenStudio Toulouse

Offline

#3 Re: Filtre poids

(31-03-2019 20:43:31)


Merci ! Génial wink

Bonne soirée ! Et merci pour la réponse rapide wink

Offline

#4 Re: Filtre poids

(31-03-2019 21:05:42)


Bon du coup... Ca fonctionne si je met du texte.

Par contre je n'arrive pas à appliquer ce filtre au modules de livraison :

l'affichage suivant :

CHOISISSEZ VOTRE MOYEN DE LIVRAISON

1)Envoi par COURRIER SUIVI
2)Mondial Relay

Est généré par :

<div class="panel-body" id="delivery-module-list-block">
                               
</div>

Mais je ne trouve pas dans la doc comment n'afficher que le mode de livraison ID = 30 par exemple...

Quelle solution serait possible ?

Offline

#5 Re: Filtre poids

(31-03-2019 21:25:24)


Bon, le filtre ne fonctionne pas...

{loop type="order" name="order__weight"}
la commande fait {$WEIGHT} KG //affichage du poids OK
        {if $WEIGHT > 0.1}
                supérieur à 100gr // jamais affiché, que le poids soit > ou < à 0.1
        {/if}
{/loop}

Offline

#6 Re: Filtre poids

(01-04-2019 01:18:12)


Ça affiche quoi {$WEIGHT} exactement ?


OpenStudio Toulouse

Offline

#7 Re: Filtre poids

(01-04-2019 14:22:01)


ca affiche "  la commande fait 0.08 KG " pour "la commande fait {$WEIGHT} KG"

Offline

#8 Re: Filtre poids

(01-04-2019 15:01:41)


0.08 < 0.1, c'est normal que la condition ne soit pas vérifiée.


OpenStudio Toulouse

Offline

#9 Re: Filtre poids

(01-04-2019 15:08:49)


Elle n'est pas non plus vérifiée quand je met 0.2KG dans mon panier... sad

Offline

#10 Re: Filtre poids

(01-04-2019 15:25:25)


Je ne vois pas de raison pour que la condition ne soit pas vérifiée si $WEIGHT est > 0.1

Tu es sur quelle version de PHP ?

Essaie un truc du genre {if floatval($WEIGHT) > 0.1} ... {/if}


OpenStudio Toulouse

Offline

#11 Re: Filtre poids

(01-04-2019 15:26:48)


le code :
{form_field field='delivery-module'}

                <div id="delivery-method" class="panel panel-default">
                    <div class="panel-heading">
                   
                                                       
                       
                       
                        {intl l="Choose your delivery method"}
                        {if $error}
                            <span class="help-block"><span class="fa fa-remove"></span> {$message}</span>
                        {/if}
                       
                       


                    </div>
               
               
               
               
                    {loop type="order" name="order__weight"}
                    la commande fait {$WEIGHT} KG
                            {if ($WEIGHT) > 0.1}
                                livraison colis supérieur à 100gr
                            {else}
                                livraison colis inférieur à 100gr
                            {/if}
                    {/loop}
                   
                   
               
                    <div class="panel-body" id="delivery-module-list-block">
                               
                    </div>
                   
                   
                   

                {/form_field}

Le résultat :

la commande fait 0.08 KG livraison colis inférieur à 100gr la commande fait 0.16 KG livraison colis supérieur à 100gr la commande fait 0.08 KG livraison colis inférieur à 100gr la commande fait 0.08 KG livraison colis inférieur à 100gr la commande fait 0.08 KG livraison colis inférieur à 100gr

Je n'arrive pas a comprendre pourquoi j'ai 0.16 ! Ni pourquoi le test se repete 5 fois...

Sinon la boucle fonctionne...

Offline

#12 Re: Filtre poids

(01-04-2019 15:30:43)


roadster31 wrote:

Je ne vois pas de raison pour que la condition ne soit pas vérifiée si $WEIGHT est > 0.1

Tu es sur quelle version de PHP ?

Essaie un truc du genre {if floatval($WEIGHT) > 0.1} ... {/if}

Désolé on a répondu en meme temps...

La boucle fonctionne comme vu dans mon post precedent, j'avais été induit en erreur a cause du 0.16 qui sort de nulle part.

floatval($WEIGHT) -> aucun changement.

PHP 5.6

Offline

#13 Re: Filtre poids

(01-04-2019 15:31:37)


Mais le test fonctionne ! 0.08 < 0.1 et 0.16 > 0.1, il n'y a donc pas de problème avec la condition, ça me rassure de vérifier une fois de plus que la magie n'existe pas wink

{loop type="order" name="order__weight"} te remonte toutes les commandes du client, donc c'est normal que tu aies plusieurs résultats si le client a déjà passé plusieurs commandes.

Je subodore que tu veux en fait le poids de la commande en cours de constitution, qui n'existe pas encore, puisque le panier n'a pas encore été validé (la commande est effectivement crée quand le client clique sur "Payer"). Ce que tu souhaites, donc, c'est le poids du panier, que tu peux obtenir avec :

{cart attr='weight'}

(cf. http://doc.thelia.net/en/documentation/ … cart.html)

Exemple :

{if {cart attr='weight'} > 0.1}
    livraison colis supérieur à 100gr
{else}
    livraison colis inférieur à 100gr
{/if}

J'ai bon ?


OpenStudio Toulouse

Offline

#14 Re: Filtre poids

(01-04-2019 15:35:04)


roadster31 wrote:

Mais le test fonctionne ! 0.08 < 0.1 et 0.16 > 0.1, il n'y a donc pas de problème.

{loop type="order" name="order__weight"} te remonte toutes les commandes du client, donc c'est normal que tu aies plusieurs résultats si le client a déjà passé plusieurs commandes.

Je subodore que tu veux en fait le poids de la commande en cours de constitution (et qui donc n'existe pas encore...). Ce que tu veux, en fait, c'est le poids du panier, que tu peux obtenir avec :

{cart attr='weight'}

(cf. http://doc.thelia.net/en/documentation/ … cart.html)

J'ai bon ?

T'as plus que bon, tu as les points bonus meme wink

Je vais potasser ca et mettre ensuite le code propre pour aider d'autres.

maintenant que j'ai ma boucle qui va fonctionner, comment afficher uniquement le module voulu ?

Offline

#15 Re: Filtre poids

(01-04-2019 15:38:37)


Pour contrôler l'affichage du module, tu peux utiliser le paramètre 'code' de la boucle Delivery (cf. http://doc.thelia.net/en/documentation/ … ivery.html)

{if {cart attr='weight'} > 0.1}
    {$codeModule = 'MondialRelay'}
{else}
    {$codeModule = 'LettreSuivie'}
{/if}

{loop type="delivery" name="paiement" code=$codeModule}
...
{/loop}

J'ai inventé les code des modules, mais tu vois l'idée smile


OpenStudio Toulouse

Offline

#16 Re: Filtre poids

(01-04-2019 16:03:00)


Compris, testé et validé ! TOP !

Dans le template de base, c'est :
<div class="panel-body" id="delivery-module-list-block"></div>

Qui affiche la liste des transports à choisir avec un bouton radio à cocher.

Ou dois-je aller chercher le code qui correspond à chacun des modules, pour ensuite l'inclure dans la boucle delivery ?

Offline

#17 Re: Filtre poids

(01-04-2019 17:55:42)


Le code d'un module tu le trouves dans le BO -> Modules

download

C'est aussi le nom du répertoire du module.


OpenStudio Toulouse

Offline

#18 Re: Filtre poids

(01-04-2019 18:07:55)


En fait je parlais du code "html" à intégrer, et non pas du code "nom" du module. La boucle est fonctionnelle grace à tes conseils.

Me reste maintenant à afficher le bouton "radio" à cocher pour la livraison, et surtout le choix du point relay mondial relay.

Jusqu'a maintenant les modes s'affichent bien grace à <div class="panel-body" id="delivery-module-list-block"></div>

Mais le but est maintenant de les filtrer...

Offline

#19 Re: Filtre poids

(01-04-2019 18:11:25)


Ce bloc est mis à jour par une requête Ajax, qui charge le fichier templates/frontOffice/default/ajax/order-delivery-module-list.html


OpenStudio Toulouse

Offline

#20 Re: Filtre poids

(01-04-2019 18:13:41)


Ajax ? Perso je prefere monsieur propre !

Je regarde ca et je teste wink

Offline

#21 Re: Filtre poids

(01-04-2019 21:25:45)


C'est fonctionnel wink Merci !

Maintenant je dois intégrer Payplug... Cela fera très probablement l'objet d'un autre post...

Des conseils ? Des piste ? Sais-tu si un developpement est en cours ou prévu ?