Nicks Posted June 21, 2013 Share Posted June 21, 2013 (edited) [RESOLU] je trouve pas comment éditer le titre, désolé... : / Bonjour, Je souhaite filtrer les modes de paiement en fonction de la catégorie rattachée à un (des) produit(s). Pour ce faire, j'applique une condition qui indique que si un produit est rattachée à telle catégorie alors tel mode de paiement ne s'affiche pas (dans l'étape 5 de validation du panier (paiement). Exemple du code que j'utilise pour le module chèque (modules/cheque/views/templates/hook/payment.tpl) : {foreach from=$cart->getProducts() item=product name=productLoop} {if $smarty.foreach.productLoop.last} {if $product.id_category_default != 18} <p class="payment_module"> <a title="{l s='Pay by check.' mod='cheque'}" href="{$link->getModuleLink('cheque', 'payment', [], true)}"> <img alt="{l s='Pay by check.' mod='cheque'}" src="{$this_path}cheque.jpg" width="86" height="49"> {l s='Pay by check (order processing will take more time).' mod='cheque'} </a> </p> {/if} {/if} {/foreach} Ceci fonctionne très bien, à condition qu'il n'y ait qu'un seul produit dans mon panier, OU que ce soit le dernier produit de la liste du panier qui soit rattaché à la catégorie 18. Je pense que ceci est lié au code : {if $smarty.foreach.productLoop.last}. Ce que je cherche à faire c'est qu'à partir du moment où un des produits est rattaché à la catégorie 18, on ne propose pas le paiement par chèque (pour l'ensemble du panier). J'ai bien trouvé l'alternative : {if $smarty.foreach.productLoop.first}, qui prendra alors en compte le premier produit listé, mais rien concernant 'n'importe lequel des produits". J'ai testé : {if $smarty.foreach.productLoop}, mais sans succès... Je précise que j'utilise PS 1.5.4.1 Merci! Edited June 21, 2013 by Nicks (see edit history) Link to comment Share on other sites More sharing options...
Vincent Decaux Posted June 21, 2013 Share Posted June 21, 2013 (edited) Bonjour, Il faut faire une boucle intermédiaire pour détecter si oui ou non on accepte le paiement par chèque : {$flag = false} {foreach from=$cart->getProducts() item=product name=productLoop} {if $product.id_category_default != 18} {$flag = true} {/if} {/foreach} Et ensuite : {if !$flag} <p class="payment_module"> <a href="{$link->getModuleLink('cheque', 'payment', [], true)}" title="{l s='Pay by check.' mod='cheque'}"> <img src="{$this_path}cheque.jpg" alt="{l s='Pay by check.' mod='cheque'}" height="49" width="86"> {l s='Pay by check (order processing will take more time).' mod='cheque'} </a> </p> {/if} Mais le mieux reste de passer par le côté PHP, en overridant ce controller. C'est plus complexe. Edited June 21, 2013 by Vincent Decaux (see edit history) Link to comment Share on other sites More sharing options...
Nicks Posted June 21, 2013 Author Share Posted June 21, 2013 Bonjour Vincent, Merci pour cette réponse rapide! J'ai modifié votre code de la manière suivante (remplacé !=18 par ==18) et ca fonctionne (j'ai un peu de mal à me l'expliquer pour le coup, je pense que mon cerveau sature après une matinée à faire des if, elseif, ==, != ) {$flag = false} {foreach from=$cart->getProducts() item=product name=productLoop} {if $product.id_category_default == 18} {$flag = true} {/if} {/foreach} {if !$flag} <p class="payment_module"> <a href="{$link->getModuleLink('cheque', 'payment', [], true)}" title="{l s='Pay by check.' mod='cheque'}"> <img src="{$this_path}cheque.jpg" alt="{l s='Pay by check.' mod='cheque'}" height="49" width="86"> {l s='Pay by check (order processing will take more time).' mod='cheque'} </a> </p> {/if} Ceci étant dit, je ne doute pas un seul instant qu'il ya une méthode plus propre, mais c'est définitivement au-delà de mes compétences, alors ca fera très bien l'affaire comme ca! Encore merci donc! Link to comment Share on other sites More sharing options...
Vincent Decaux Posted June 21, 2013 Share Posted June 21, 2013 Oui vous avez bien fait ! pour mettre le flag à vrai, il fallait que ce soit un "=" et non un "!=". Cela suffira comme vous dites Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now