kokopelli Posted October 10, 2012 Share Posted October 10, 2012 Bonjour amis Prestashopiens, Après mettre pris pas mal la tête, je remets mon interrogation entre vos mains. Enfaite j'essaye de ranger les fabricants en fonction de leur Première lettre sur la page manufacturer_list.tpl. Comme un exemple vaut 1000 mots je voudrais faire quelques choses semblable à ceci http://vintageking.com/brands/index/ Pourriez vous me donner deux trois pistes pour que je puisse parvenir à mes fins ? J'avouerais avoir un peu l'impression de tourner en rond avec ça !! Je vous remercie d'avance ! Link to comment Share on other sites More sharing options...
bckstreet Posted October 10, 2012 Share Posted October 10, 2012 Bonjour, suivant votre version de Prestashop, il vous faudrait aller dans : classes/Manufacturer.php Dans ce fichier, vous trouverez la fonction "getManufacturers". il faut ensuite s'assurer que l'ordre est "by name" et "ASC" sur la ligne suivante : $sql.= ' ORDER BY m.`name` ASC'.($p ? ' LIMIT '.(((int)($p) - 1) * (int)($n)).','.(int)($n) : ''); Il me semble que la solution est de ce côté, à vous de me dire Link to comment Share on other sites More sharing options...
kokopelli Posted October 10, 2012 Author Share Posted October 10, 2012 Je test ça et viendrais ici pour vous dire ! Merci en tout cas !! Link to comment Share on other sites More sharing options...
kokopelli Posted October 11, 2012 Author Share Posted October 11, 2012 Bonjour, En regardant plus attentivement la ligne que vous m'avez donné, il s'agit d'afficher les fabriquand dans l'ordre alphabétique ! Or je recherche et les ranger par ordre alphabétique tout en les classant en fontion de leur premeir lettre genre A---------------------------------------------- Atol Atomic Allion B------------------------------------------ Bêta Beru Bornp C--------------------------------------- etc.... Enfête de les compartimenter !! Merci quand même ! Si quelqu'un connais la solution Link to comment Share on other sites More sharing options...
iann_ash Posted October 16, 2012 Share Posted October 16, 2012 Salut, Ton post m'intéressait mais plus pour un classement par nombre de produit. En attendant des réponse un peu plus propre (celle-ci lancera peut-être le nettoyage ), j'ai une petit piste qui pourrait t'aider. Dans le fichier themes/ton_theme/manufacturer-list.tpl, il faut apporter les modification suivantes : 1. Créer une variable tableau avec les lettres de l'alphabet... Idealement, je crois qu'il faut faire ça dans un fichier php mais je ne sais pas encore lequel (je commence seulement dans ce domaine). En attendant, j'ai réussi de façon très "sââââle" dans le fichier tpl directement (en smarty) avec LES instruction suivante : {*Création d'un variable tableau avec les lettres de l'alphabet*} {$alphabet[]='A'} {$alphabet[]='B'} {$alphabet[]='C'} {$alphabet[]='D'} {$alphabet[]='E'} {$alphabet[]='F'} {$alphabet[]='G'} {$alphabet[]='H'} {$alphabet[]='I'} {$alphabet[]='J'} {$alphabet[]='K'} {$alphabet[]='L'} {$alphabet[]='M'} {$alphabet[]='N'} {$alphabet[]='O'} {$alphabet[]='P'} {$alphabet[]='Q'} {$alphabet[]='R'} {$alphabet[]='S'} {$alphabet[]='T'} {$alphabet[]='U'} {$alphabet[]='V'} {$alphabet[]='W'} {$alphabet[]='X'} {$alphabet[]='Y'} {$alphabet[]='Z'} 2. J'ai créé une boucle d'itération sur cette variable tableau pour "scanner" chaque valeur (a, b, c...). Dans cette boucle, j'ajoute un list-item (ou pas, dépend de ton désir au niveau du design) qui affiche la "lettre en cours". {foreach $alphabet as $lettre} <li class="{if $smarty.foreach.$alphabet.first}first_item{elseif $smarty.foreach.alphabet.last}last_item{else}item{/if}"> <div> <p> {$lettre} ---------------- </p> </div> </li> 3. Toujours dans cette boucle, je copie la boucle déjà existante du tableau $manufacturers et qui consiste à écrire tous les list-items avec le fabricant (+logo+descritpion+etc...). 4. Je modifie cette boucle pour y ajouter un test conditionnel qui vérifie si la première lettre du fabricant est bien la même que la "lettre en cours". {if $manufacturer.name[0] == $lettre} Et voilà, en bas de mon bas de mon post, tu trouveras le code entier mais cependant, il faut se méfier parce que c'est un thème personnalisé... C'est pour ça que je t'ai détailler ma démarche parce que je ne sais pas ce que ça donnera sous le thème Prestashop (ou autre).... je n'ai pas testé. Note aussi, qu'à mon avis, cette façon de faire enfreint pas mal de règle "déontologique" du développement sous PS... Disons que c'est une solution de secours en attendant que quelqu'un viennent soit donner une meilleur solution, soit indiquer ce qui est MAL et ce qui est BIEN Finalement, il faudra encore travailler sur le principe de "pagination"... En effet, si tu as plus de 10 produit, il affichera toutes les lettres de l'alphabet (même celles qui sont vides) de A à Z... mais sur toutes les pages... Donc, si, en page 1, tu étais à la lettre S, il recommencera quand même à la lettre A sur la page 2... J'espère qu'une bonne âme nous permettra de faire évoluer ce bout de code. cordialement, code entier du template : {* * 2007-2011 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 6594 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA * * * * DIRTY VERSION - MODIFIED BY IANN ASH (but i am not proud of it ! :-) *} {capture name=path}{l s='Manufacturers'}{/capture} {include file="$tpl_dir./breadcrumb.tpl"} <div class="mainContent"> <h1>{l s='Manufacturers'}</h1> {if isset($errors) AND $errors} {include file="$tpl_dir./errors.tpl"} {else} <p>{strip} <span class="bold"> {if $nbManufacturers == 0}{l s='There are no manufacturers.'} {else} {if $nbManufacturers == 1}{l s='There is'}{else}{l s='There are'}{/if} {$nbManufacturers} {if $nbManufacturers == 1}{l s='manufacturer.'}{else}{l s='manufacturers.'}{/if} {/if} </span>{/strip} </p> {if $nbManufacturers > 0} {*Création d'un variable tableau avec les lettres de l'alphabet*} {$alphabet[]='A'} {$alphabet[]='B'} {$alphabet[]='C'} {$alphabet[]='D'} {$alphabet[]='E'} {$alphabet[]='F'} {$alphabet[]='G'} {$alphabet[]='H'} {$alphabet[]='I'} {$alphabet[]='J'} {$alphabet[]='K'} {$alphabet[]='L'} {$alphabet[]='M'} {$alphabet[]='N'} {$alphabet[]='O'} {$alphabet[]='P'} {$alphabet[]='Q'} {$alphabet[]='R'} {$alphabet[]='S'} {$alphabet[]='T'} {$alphabet[]='U'} {$alphabet[]='V'} {$alphabet[]='W'} {$alphabet[]='X'} {$alphabet[]='Y'} {$alphabet[]='Z'} <ul id="manufacturers_list"> {* Boucle d'itération sur la variable tableau avec un test pour déterminer si le fabricant correspond à cette lettre. Si oui, afficher le fabricant. *} {foreach $alphabet as $lettre} <li class="{if $smarty.foreach.$alphabet.first}first_item{elseif $smarty.foreach.alphabet.last}last_item{else}item{/if}"> <div> <p> {$lettre} ---------------- </p> </div> </li> {foreach from=$manufacturers item=manufacturer name=manufacturers} {if $manufacturer.name[0] == $lettre} <li class="{if $smarty.foreach.manufacturers.first}first_item{elseif $smarty.foreach.manufacturers.last}last_item{else}item{/if}"> <div class="left_side"> <!-- logo --> <div class="logo"> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$manufacturer.name|escape:'htmlall':'UTF-8'}">{/if} <img src="{$img_manu_dir}{$manufacturer.image|escape:'htmlall':'UTF-8'}-manuf_medium.jpg" alt="" /> {if $manufacturer.nb_products > 0}</a>{/if} </div> <!-- name --> <h3> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.name|truncate:60:'...'|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}</a>{/if} </h3> <p class="description rte"> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.description} {if $manufacturer.nb_products > 0}</a>{/if} </p> </div> <div class="right_side"> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} <span>{$manufacturer.nb_products|intval} {if $manufacturer.nb_products == 1}{l s='product'}{else}{l s='products'}{/if}</span> {if $manufacturer.nb_products > 0}</a>{/if} {if $manufacturer.nb_products > 0} <a class="button" href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{l s='view products'}</a> {/if} </div> <br class="clear"/> </li> {/if} {/foreach} {/foreach} </ul> {include file="$tpl_dir./pagination.tpl"} {/if} {/if} </div> Link to comment Share on other sites More sharing options...
kokopelli Posted October 16, 2012 Author Share Posted October 16, 2012 Ahhh Merci beaucoup Iann ! Nous avons réussit à nous approcher du résultat aussi ! Je viendrais ici quand la solution sera complète et ton aide devrais pouvoir nous permettre de finaliser tout ça !! Merci beaucoup !! Link to comment Share on other sites More sharing options...
kokopelli Posted October 22, 2012 Author Share Posted October 22, 2012 Je vous mets le code de ma page avec la solution !!! {* * 2007-2012 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2012 PrestaShop SA * @version Release: $Revision: 14008 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {capture name=path}{l s='Manufacturers'}{/capture} {include file="$tpl_dir./breadcrumb.tpl"} <h1>{l s='Manufacturers'}</h1> {if isset($errors) AND $errors} {include file="$tpl_dir./errors.tpl"} {else} <p>{strip} <span class="bold"> {if $nbManufacturers == 0}{l s='There are no manufacturers.'} {else} {if $nbManufacturers == 1}{l s='There is'}{else}{l s='There are'}{/if} {$nbManufacturers} {if $nbManufacturers == 1}{l s='manufacturer.'}{else}{l s='manufacturers.'}{/if} {/if} </span>{/strip} </p> {if $nbManufacturers > 0} <ul id="manufacturers_list"> {assign var=first value=''} {foreach from=$manufacturers item=manufacturer name=manufacturers} {if $manufacturer.name[0]!=$first} <br/> <h2 class="letterManufacturer">{$manufacturer.name[0]}</h2> {assign var=first value=$manufacturer.name[0]} {/if} <li class="clearfix {if $smarty.foreach.manufacturers.first}first_item{elseif $smarty.foreach.manufacturers.last}last_item{else}item{/if}"> <div class="left_side"> <!-- name --> <h3> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.name|truncate:60:'...'|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}</a>{/if} </h3> </div> <div class="right_side"> {if $manufacturer.nb_products > 0}<a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} <span>{$manufacturer.nb_products|intval} {if $manufacturer.nb_products == 1}{l s='product'}{else}{l s='products'}{/if}</span> {if $manufacturer.nb_products > 0}</a>{/if} {if $manufacturer.nb_products > 0} <a class="button" href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{l s='view products'}</a> {/if} </div> <!--<br class="clear"/>--> </li> {/foreach} </ul> <div class="clear"></div> {include file="$tpl_dir./pagination.tpl"} {/if} {/if} Merci encore à tout le monde pour l'aide ! Link to comment Share on other sites More sharing options...
Lou2862 Posted January 25, 2013 Share Posted January 25, 2013 C'est très lourd, si on a beaucoup de fabricant c'est problématique, puisqu'on exécute 26 fois la requête, je pense que l'idée de comparer à chaque étape le première lettre de la marque avec la première lettre de la marque précédente, et d'inclure une div, s'il y a une différence. On peut faire ça puisque les fabricants sont déjà donné dans l'ordre alphabétique (c.f "function getManufacturers" dans la classe "Manufacturers"). Je vais y travailler et je vous tiens au courant. Bon courage! 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