ROCK Hervé Posted April 7, 2014 Share Posted April 7, 2014 Bonjour, J'ai quelque petit souci pour ajouter une nouvelle sorte de "TRI". Je suis actuellement sous PrestaShop 1.5.6. Je pense qu'il me manque quelque chose au niveau de mes modifications. - Je sais comment ajouter une nouvelle liste de Tri. (themes/xxx/product-sort.tpl) - Je sais qu'il faut modifier ou Override d'autre fichier comme Tools.php, Category.php ou FrontController.php. Par contre, impossible de les faire fonctionner... Je voudrais faire un classement par "meilleur offre" (donc la meilleur réduction). Ou encore par "meilleur vente". Dans product-sort.tpl j'ai modifié ça dans product-sort.tpl : <form id="productsSortForm{if isset($paginationId)}_{$paginationId}{/if}" action="{$request|escape:'htmlall':'UTF-8'}" class="productsSortForm"> <p class="select"> <label for="selectPrductSort{if isset($paginationId)}_{$paginationId}{/if}">{l s='Sort by'}</label> <select id="selectPrductSort{if isset($paginationId)}_{$paginationId}{/if}" class="selectProductSort"> <option value="{$orderbydefault|escape:'htmlall':'UTF-8'}:{$orderwaydefault|escape:'htmlall':'UTF-8'}" {if $orderby eq $orderbydefault}selected="selected"{/if}>{l s='--'}</option> {if !$PS_CATALOG_MODE} <option value="price:asc" {if $orderby eq 'price' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Price: Lowest first'}</option> <option value="price:desc" {if $orderby eq 'price' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Price: Highest first'}</option> {/if} <option value="sales:desc" {if $orderby eq 'sales' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Sales: Best to Worst'}</option> <option value="sales:asc" {if $orderby eq 'sales' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Sales: Worst to Best'}</option> <option value="best:asc" {if $orderby eq 'best' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Best Offers'}</option> <option value="name:asc" {if $orderby eq 'name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Product Name: A to Z'}</option> <option value="name:desc" {if $orderby eq 'name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Product Name: Z to A'}</option> {if isset($PS_STOCK_MANAGEMENT) && $PS_STOCK_MANAGEMENT && !$PS_CATALOG_MODE} <option value="quantity:desc" {if $orderby eq 'quantity' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='In stock'}</option> {/if} <option value="reference:asc" {if $orderby eq 'reference' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Reference: Lowest first'}</option> <option value="reference:desc" {if $orderby eq 'reference' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Reference: Highest first'}</option> </select> </p> </form> Dans Category.php je pensais modifier la requête SQL qui est proposé (mais après avoir essayé, elle me renvoi uniquement 1) Dans Tool.php j'ai fais cette modification la : public static function getProductsOrder($type, $value = null, $prefix = false) { switch ($type) { case 'by' : $list = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position', 5 => 'manufacturer_name', 6 => 'quantity', 7 => 'reference', 8 => 'sales', 9 => 'bestoffers'); $value = (is_null($value) || $value === false || $value === '') ? (int)Configuration::get('PS_PRODUCTS_ORDER_BY') : $value; $value = (isset($list[$value])) ? $list[$value] : ((in_array($value, $list)) ? $value : 'position'); $order_by_prefix = ''; if ($prefix) { if ($value == 'id_product' || $value == 'date_add' || $value == 'date_upd' || $value == 'price' || $value == 'reference' || $value == 'sales' || $value == 'bestoffers') $order_by_prefix = 'p.'; elseif ($value == 'name') $order_by_prefix = 'pl.'; elseif ($value == 'manufacturer_name' && $prefix) { $order_by_prefix = 'm.'; $value = 'name'; } elseif ($value == 'position' || empty($value)) $order_by_prefix = 'cp.'; } return $order_by_prefix.$value; break; case 'way' : $value = (is_null($value) || $value === false || $value === '') ? (int)Configuration::get('PS_PRODUCTS_ORDER_WAY') : $value; $list = array(0 => 'asc', 1 => 'desc'); return ((isset($list[$value])) ? $list[$value] : ((in_array($value, $list)) ? $value : 'asc')); break; } } Malheureusement il me manque une chose à modifier pour que cela marche. Mais je ne sais pas quoi.... Si qqun d'entre vous à déjà eu à faire a ce problème et à trouvé une solution... Car j'ai beau avoir testé ce que Google me proposait... Rien n'y fais. Merci Attached Thumbnails Link to comment Share on other sites More sharing options...
ROCK Hervé Posted April 8, 2014 Author Share Posted April 8, 2014 Re, J'ai avancé et découvert que le problème ne venait pas de mon code, qui est correct, mais du module "bloc de navigation à facette". Si qqun à une suggestion à propos de la modification du module. Il est le(la) bienvenue ! Link to comment Share on other sites More sharing options...
ROCK Hervé Posted April 8, 2014 Author Share Posted April 8, 2014 Et re encore une fois Voilà, j'ai réussi à boucler cette affaire. Il fallait, dans le module, rajouter les lignes de codes concernant la requête que j'ai insérer dans mon fichier Category.php. Si vous voulez, je pourrais éventuellement faire un tuto de tout cela (si demande il y a). Sujet résolu ! Bonne journée à tous ! Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 26, 2016 Share Posted September 26, 2016 Volontier 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