Nazo Posted August 18, 2011 Share Posted August 18, 2011 Bonjour à tous, Je suis un peu géné de solliciter votre aide. En effet, je fais un site sur prestashop et je dois reconnaitre que je ne touche pas à Smarty. je me contente de le contourner et de réaménager le html et le css qu'il y a autour. Or la j'ai un problème. J'ai cherché tout l'après midi en vain. Voici mon code. Il correspond à un module de prestashop que je suis en train de modifier : <div id="cadre-nouveautes"> {if $new_products !== false} {foreach from=$new_products item='product' name='newProducts'} {foreach from=$new_products item=newproduct name=myLoop} <div class="image-nouveau-produit"> <a href="{$product.link}" title="{$product.legend|escape:html:'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'medium')}" height="{$mediumSize.height}" width="{$mediumSize.width}" alt="{$product.legend|escape:html:'UTF-8'}" /></a> </div> <div class="lien-nouveau-produit"> <a href="{$newproduct.link}" title="{$newproduct.name|escape:html:'UTF-8'}">{$newproduct.name|strip_tags|escape:html:'UTF-8'}</a> </div> {/foreach} {/foreach} <div class="clear"></div> <div class="lien-tous-nouveaux-produits"> <p><a href="{$link->getPageLink('new-products.php')}" title="{l s='All new products' mod='blocknewproducts'}" class="button_large">{l s='All new products' mod='blocknewproducts'}</a></p> {else} <p>{l s='No new products at this time' mod='blocknewproducts'}</p> {/if} </div> </div> <!-- /MODULE Block new products --> Mon problème est que ca devrait me donner 3 lignes. Or ca m'en donne 9. Les résultats sont triplés alors qu'ils ne le devraient pas. Je vous joins une image de ce que j'ai et une de ce que je voudrais. Pourriez vous m'aider svp? Je rame... Merci d'avance. Cordialement Link to comment Share on other sites More sharing options...
coeos.pro Posted August 18, 2011 Share Posted August 18, 2011 Salut, c'est normal, tu as 2 x la ligne foreach from=$new_products imbriquées, donc si il y a 3 valeurs dans new_products tu fait 3x3=9 Link to comment Share on other sites More sharing options...
Nazo Posted August 18, 2011 Author Share Posted August 18, 2011 Je sais bien. J'ai compris en gros le problème (j'ai passé l’après midi a faire des tests). Mais lorsque j’enlève un des deux j'ai plus les liens ou plus l'image. J'ai essayé de faire une seule "phrase" smarty en essayant d'inclure mes deux item et mes deux names mais ça n'a jamais fonctionné. J'ai pourtant regardé sur les tuto smarty mais sans résultat. Idem pour les forums. Je suis sur un prestashop 1.4, je sais pas si c'est smarty 3 dessus. Parce qu'apparemment sur Smarty 3 un foreach peut prendre plusieurs valeurs. Mais quoi que j'essaye ça ne faisait pas. J'ai regardé "section" aussi mais mes essais n'ont pas non plus été concluant... Saurais tu comment je peux compiler les deux foreach et obtenir le résultat que je souhaite? Cordialement Bruno Link to comment Share on other sites More sharing options...
coeos.pro Posted August 18, 2011 Share Posted August 18, 2011 Si tu enlèves une de ces 2 lignes il faut aussi enlever 1 des 2 {/foreach} Link to comment Share on other sites More sharing options...
Nazo Posted August 19, 2011 Author Share Posted August 19, 2011 lol oui merci, ça aussi je l'avais compris... C'est ce que j'ai fais aussi. Mais mon problème c'est d’intégrer mes items et mes name dans une seule requête, qu'elle soit foreach ou section. Comme je le disais, j'ai besoin des conditions des deux foreach mais en un seul pour ne pas avoir 9 lignes mais 3. Link to comment Share on other sites More sharing options...
coeos.pro Posted August 19, 2011 Share Posted August 19, 2011 Danc ce cas supprime un foreach et renomme les item du foreach supprimé par l'item du foreach restant: {foreach from=$new_products item='product' name='newProducts'} <div class="image-nouveau-produit"> <a href="{$product.link}" title="{$product.legend|escape:html:'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'medium')}" height="{$mediumSize.height}" width="{$mediumSize.width}" alt="{$product.legend|escape:html:'UTF-8'}" /></a> </div> <div class="lien-nouveau-produit"> <a href="{$product.link}" title="{$product.name|escape:html:'UTF-8'}"> {$product.name|strip_tags|escape:html:'UTF-8'} </a> </div> {/foreach} 1 Link to comment Share on other sites More sharing options...
Nazo Posted August 19, 2011 Author Share Posted August 19, 2011 Ca marche impeccable. Un grand merci, vraiment. Quand je pense que j'y ai passé au moins quatre bonnes heures à chercher et que finalement c’était "si simple". Finalement, tu as enlevé le 2ème foreach, et tu as modifier le code du lien : <a href="{$newproduct.link}" title="{$newproduct.name|escape:html:'UTF-8'}">{$newproduct.name|strip_tags|escape:html:'UTF-8'}</a> est devenu : <a href="{$product.link}" title="{$product.name|escape:html:'UTF-8'}"> {$product.name|strip_tags|escape:html:'UTF-8'} </a> Je ne suis pas tout a fait sur d'avoir compris le raisonnement. Mais c'est logique puisque je ne connais pas le langage. Il faudrait vraiment que je me mette à l'apprendre mais c'est tellement indigeste (comme PHP, que je ne connais pas non plus d'ailleurs...) En tout cas un grand merci encore pour le temps que tu m'as accordé. A bientôt Bruno Link to comment Share on other sites More sharing options...
coeos.pro Posted August 19, 2011 Share Posted August 19, 2011 Le mode d'emploi smarty est simple et en Français, donc aucune excuse http://www.smarty.net/docsv2/fr/language.function.foreach 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