IchabOd Posted August 25, 2011 Share Posted August 25, 2011 Bonjour, Je souhaiterais savoir comment faire pour faire le tri dans la page des fabricants. Par défaut ils s'affichent par nom je crois. Je souhaiterais mettre un menu déroulant en haut pour que l'utilisateur puisse choisir d'autres critères (pour le moment je vais restreindre à nom asc ou nom desc) et recharger la page, comme ce qui existe déjà sur la page de chaque fabricant (on peut recharger la liste de ses produits selon plusieurs critères : position, prix, nom, etc...). Pourriez-vous me dire comment faire ? Pour le moment, j'ai bien sûr tâtonné, et j'ai fait: - j'ai créé un fichier manufacturer-sort.php (comme product-sort.php) en mettant dedans : $controller = new FrontController(); $controller->manufacturerSort(); - J'ai modifié la classe FrontController.php (oui je sais c'est pas bien pour les futures updates...) et dedans j'ai créé la fonction manufacturerSort() qui ressemble beaucoup à productSort() : public function manufacturerSort() { if (!self::$initialized) $this->init(); $orderByValues = array(0 => 'name', 1 => 'date_add', 2 => 'date_upd', 3 => 'position'); $orderWayValues = array(0 => 'asc', 1 => 'desc'); $this->orderBy = Tools::strtolower(Tools::getValue('orderby', $orderByValues[(int)(Configuration::get('PS_MANUFACTURERS_ORDER_BY'))])); $this->orderWay = Tools::strtolower(Tools::getValue('orderway', $orderWayValues[(int)(Configuration::get('PS_MANUFACTURERS_ORDER_WAY'))])); if (!in_array($this->orderBy, $orderByValues)) $this->orderBy = $orderByValues[0]; if (!in_array($this->orderWay, $orderWayValues)) $this->orderWay = $orderWayValues[0]; self::$smarty->assign(array( 'orderby' => $this->orderBy, 'orderway' => $this->orderWay, 'orderbydefault' => $orderByValues[(int)(Configuration::get('PS_MANUFACTURERS_ORDER_BY'))], 'orderwayposition' => $orderWayValues[(int)(Configuration::get('PS_MANUFACTURERS_ORDER_WAY'))], // Deprecated: orderwayposition 'orderwaydefault' => $orderWayValues[(int)(Configuration::get('PS_MANUFACTURERS_ORDER_WAY'))])); } (par la même occasion j'en ai profité pour modifier Configuration.php et ajouter : 'PS_MANUFACTURERS_ORDER_BY' dans le panneau admin pour paramétrer les tris par défaut.) - j'ai créé un fichier manufacturer-sort.tpl, dans lequel j'ai écrit peu ou prou ce qu'il y a dans son homonyme pour les produits : {if isset($orderby) AND isset($orderway)} <!-- Sort manufacturers --> {if isset($smarty.get.id_category) && $smarty.get.id_category} {assign var='request' value=$link->getPaginationLink('category', $category, false, true)} {elseif isset($smarty.get.id_manufacturer) && $smarty.get.id_manufacturer} {assign var='request' value=$link->getPaginationLink('manufacturer', $manufacturer, false, true)} {elseif isset($smarty.get.id_supplier) && $smarty.get.id_supplier} {assign var='request' value=$link->getPaginationLink('supplier', $supplier, false, true)} {else} {assign var='request' value=$link->getPaginationLink(false, false, false, true)} {/if} <form id="manufacturerSortForm" action="{$request|escape:'htmlall':'UTF-8'}"> <p class="select"> <select id="selectManufacturerSort" onchange="document.location.href = $(this).val();"> <option value="{$link->addSortDetails($request, $orderbydefault, $orderwaydefault)|escape:'htmlall':'UTF-8'}" {if $orderby eq $orderbydefault}selected="selected"{/if}>{l s='--'}</option> <option value="{$link->addSortDetails($request, 'name', 'asc')|escape:'htmlall':'UTF-8'}" {if $orderby eq 'name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Manufacturer Name: A to Z'}</option> <option value="{$link->addSortDetails($request, 'name', 'desc')|escape:'htmlall':'UTF-8'}" {if $orderby eq 'name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Manufacturer Name: Z to A'}</option> </select> <label for="selectManufacturerSort">{l s='Sort by'}</label> </p> </form> <!-- /Sort manufacturers --> {/if} (Les IF ne me servent pas mais bon je les ai laissé pour le moment) - et enfin j'ai inclus ce fichier tpl dans manufacturer-list.tpl : {include file="$tpl_dir./manufacturer-sort.tpl"} Donc maintenant j'ai bien un menu déroulant, ça recharge la page mais le tri n'est pas pris en compte, c'est toujours celui par défaut qui reste. Je pense qu'il faut modifier la classe Manufacturer.php, mais ça me semble dangereux et compliqué pour moi. Savez-vous quoi faire et me guider ? merci par avance. Link to comment Share on other sites More sharing options...
IchabOd Posted August 26, 2011 Author Share Posted August 26, 2011 un p'tit up ? quelqu'un aurait une idée ? Je suppose qu'il faut modifier la fonction : static public function getManufacturers() dans la classe Manufacturer.php En passant orderBy et orderWay en paramètres, puis en les récupérant dans le SQL, mais je n'y arrive pas. 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