Valérie Assetskaya Posted March 22, 2013 Share Posted March 22, 2013 Une question fréquemment posée est de savoir comment créer un tri personnalisé. Donc, aujourd'hui, nous allons montrer comment faire cela. À la fin de l'article, vous pouvez télécharger le module prêt à l'emploi et template personnalisé product-sort.tpl. A titre d'exemple, nous allons ajouter un nouveau tri pour le champ EAN13. Il n'est pas nécessaire d'afficher le code du module entier. C'est pourquoi nous allons simplement mettre en évidence les points principaux . Alors, comment les produits associés Prestashop fonctionnent avec la page de catalogue? Il y a une fonction assignProductList dans le contrôleur CategoryController qui en est responsable. Ci-dessous vous pouvez voir la partie du code qui est chargée de définir les produits pour une catégorie. $hookExecuted = false; Hook::exec('actionProductListOverride', array( 'nbProducts' => &$this->nbProducts, 'catProducts' => &$this->cat_products, 'hookExecuted' => &$hookExecuted, )); //a very important hook for our module. We will use it. // The hook was not executed, standard working if (!$hookExecuted) { $this->context->smarty->assign('categoryNameComplement', ''); $this->nbProducts = $this->category->getProducts(null, null, null, $this->orderBy, $this->orderWay, true); $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" $this->cat_products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay); //If the hook has not been executed, then starts the standard function of the class Category::getProducts } Pour nos fins, nous allons créer un module avec le nom: belvg_customsortexample et l'enregistrer pour ce hook: public function hookActionProductListOverride($params) { $id_category = Tools::getValue('id_category'); $id_lang = $this->context->language->id; $id_shop = $this->context->shop->id; $categoryObj = new Category($id_category, $id_lang, $id_shop); $n = abs((int)(Tools::getValue('n', ((isset($this->context->cookie->nb_item_per_page) && $this->context->cookie->nb_item_per_page >= 10) ? $this->context->cookie->nb_item_per_page : (int)Configuration::get('PS_PRODUCTS_PER_PAGE'))))); $p = abs((int)Tools::getValue('p', 1)); $order_by_values = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position', 5 => 'manufacturer_name', 6 => 'quantity', 7 => 'ean13'); $order_way_values = array(0 => 'asc', 1 => 'desc'); $orderBy = Tools::strtolower(Tools::getValue('orderby', $order_by_values[(int)Configuration::get('PS_PRODUCTS_ORDER_BY')])); //here it is assumed that we get a new value for sorting $orderWay = Tools::strtolower(Tools::getValue('orderway', $order_way_values[(int)Configuration::get('PS_PRODUCTS_ORDER_WAY')])); $params['catProducts'] = $categoryObj->getProducts($id_lang, (int)$p, (int)$n, $orderBy, $orderWay); $params['hookExecuted'] = TRUE; //please note that if this value is not set as TRUE , then in any case the standard method Category::getProducts is called } Nous avons aussi besoin de modifier le comportement de la fonctionne getProducts de la classe Category et la fonctionne productSort du contrôleur CategoryController. Ici, nous allons mettre en évidence que les points principaux, qui sont nécessaires pour le bon fonctionnement de notre module: Category::getProducts() : if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd' || $order_by == 'ean13') //added ean13 $order_by_prefix = 'p'; CategoryController:: productSort() : $order_by_values = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position', 5 => 'manufacturer_name', 6 => 'quantity', 7 => 'ean13'); //custom ean13 field Et la dernière étape consiste à modifier le template product-sort.tpl. Nous avons besoin d'ajouter des options pour ean13 dans html element select: {*custom ean13 field*} <option value="ean13:asc" {if $orderby eq 'ean13' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='EAN13: A to Z'}</option> <option value="ean13:desc" {if $orderby eq 'ean13' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='EAN13: Z to A'}</option> Comme résultat un nouveau classement a été créé. Téléchargez belvg_customsortexample.zip et product-sort.tpl. 1 Link to comment Share on other sites More sharing options...
Shaman Posted August 1, 2013 Share Posted August 1, 2013 Bonjour, est-il possible de faire la même manip' pour une caractéristique ou un attribut ? Merci pour votre réponse. Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted August 2, 2013 Author Share Posted August 2, 2013 Bonjour, Bien sûr, mais vous devrez être sur que ce nouvel attribut pour le tri, sera disponible dans ce contrôleur, c'est à dire va exister dans les données. Cordialement. Link to comment Share on other sites More sharing options...
saraspady Posted September 13, 2013 Share Posted September 13, 2013 Bonjour, Je voudrais ajouter un nouveau champ date de représentation dans le tri de la page catégorie. J'ai le module navigation à facettes dans la colonne de gauche de la page catégorie. J'ai ajouté le hook (hookActionProductListOverride) dans la classe blocklayered.php Comme tu as indiqué ci-dessus j'ai modifié les fonctions productSort() et getProducts() et ajouté le champ dans le product-sort.tpl Mais le tri par date de représentation ne fonctionne pas, il fait le tri par date d'ajout (qui est le tri par defaut). Est-ce que j'aurai oublié quelques choses? Merci pour ta réponse. Cordialement, Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted September 13, 2013 Author Share Posted September 13, 2013 Bonjour, Si product-sort.tpl est modifié comme décrit, tout doit fonctionner à 100%. Cordialement. Link to comment Share on other sites More sharing options...
saraspady Posted September 13, 2013 Share Posted September 13, 2013 le champ ean13 est bien un champ de la table ps_product? est-ce qu'il faut aussi le rajouter dans la table ps_product_shop? Est-ce que vous avez déjà essayé votre surcharge en ayant aussi le module navigation à facettes sur la page catégorie? Je travaille sous Prestashop 1.5.5 Merci Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted September 16, 2013 Author Share Posted September 16, 2013 Bonjour, Notre exemple travaille correctement, vous devez faire comme il y est écrit. S'il faut utiliser les autres champs, il est nécessaire d'opérer d'après le modèle. On n'a pas testé le fonctionnement avec navigation à facettes. Cordialement. Link to comment Share on other sites More sharing options...
sessem Posted September 25, 2013 Share Posted September 25, 2013 Bonjour Valérieje suis très intéressé par votre manip, car je voudrais moi aussi ajouter un champs dans le menu déroulant tri. Pour ma part, c'est le champs description_short que je veux ajouter. Mais j'ai un peu de mal avec vos manip, sur une version de démo de prestashop (http://graffiti-studio.com/) j'ai mis textuellement vos fichiers fournis, mais ça ne fonctionne pas. le seul fichier dont je ne suis pas sure de comprendre comment l'utiliser et où le placer dans le site c'est belvg_customsortexample.php. Donc dans un premier temps j'aimerais arriver à faire fonctionner votre manip puis ensuite l'adapter au champs description_short, et d'ailleurs pour cela, le faite de remplacer les termes EAN13 par description_short suffira-t-il ? merci beaucoup d'avance pour votre réponse cordialement Sébastien Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted September 26, 2013 Author Share Posted September 26, 2013 Bonjour Sébastien, Comment imaginez-vous cela va fonctionner? Trier par le champs texte? Par la première lettre? Cordialement. Link to comment Share on other sites More sharing options...
sessem Posted September 26, 2013 Share Posted September 26, 2013 C'est le champs description courte que je veux utiliser et les premières lettres de celui-ci. Depuis mon message, j'ai réussi à tout faire, mise à part un petit souci !Je ne peux pas utiliser d'option dans le champs, du genre texte bold, car à ce moment la le code html prend le dessus au niveau du classement sur le texte. Peut être y a t il une solution pour contrer cela ? cordialement Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted October 8, 2013 Author Share Posted October 8, 2013 Bonjour, Vous pouvez trier par le nom, càd par les champs qui n'ont pas de html. Cordialement. Link to comment Share on other sites More sharing options...
yonih Posted January 4, 2014 Share Posted January 4, 2014 Salut, merci pour ton module il est parfait. Pour ma part j'ai ajouté un tri "nouveaux produits" qui tri l'id des produits du plus grand au plus petit. Il y a juste un petit souci: lorsque je sélectionne une catégorie, il ne me donne pas le nombre total de produits qu'il y a dans cette catégorie. Il se contente juste de me donner le nombre de produits que j'ai sélectionné par page. De plus, il est impossible de naviguer entre les pages car les flèches qui le permettent sont absentes. Autre petit souci: le module ne fonctionne pas dans la page nouveau produits. Merci pour ton aide. A bientôt. Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted January 5, 2014 Author Share Posted January 5, 2014 Bonjour, Le plus probablement le souci avec le nombre est du au template personnalisé. Sur la page Nouveau Produit un autre controller est utilisé, il faut faire par analogie pour new-products. Cordialement. Link to comment Share on other sites More sharing options...
yonih Posted January 5, 2014 Share Posted January 5, 2014 Salut, Merci pour ton aide. j'utilise le thème par défaut de Prestashop. Le nombre total de produit s'affiche si le module est installé mais pas activé. Par contre si je l'active, l'affichage du nombre de produit bug de nouveau. Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted January 10, 2014 Author Share Posted January 10, 2014 Bonjour, Je suis désolée mais au regard is est vraiment difficile de comprendre la raison du problème. Cordialement. Link to comment Share on other sites More sharing options...
ticap93 Posted February 21, 2014 Share Posted February 21, 2014 Bonjour,Je voudrais pouvoir trier par "produits disponibles" plutôt que "En Stock". As-tu une idée de comment on peut le faire ? Je te remercie d'avance pour ton aide. Link to comment Share on other sites More sharing options...
Valérie Assetskaya Posted February 24, 2014 Author Share Posted February 24, 2014 Bonjour, Ce genre de tri est bien possible mais pour expliquer comment le faire il faut écrire un nouveau article Cordialement. 1 Link to comment Share on other sites More sharing options...
yann253 Posted July 16, 2014 Share Posted July 16, 2014 Bonjour merci pour ce module il fonctionne parfaitement sauf que lorsque la navigation a facette est active ca ne fonctionne plus du tout et les produit sont triés en fonction des références ce qui n'arrange pas vraiment mes affaire ;-). Avez vous une solution ou une piste pour éviter ce genre de bug? Par avance merci beaucoup. yann Link to comment Share on other sites More sharing options...
julianbaros Posted November 13, 2017 Share Posted November 13, 2017 Bonjour, Est-il possible d'utiliser cette exemple pour filtrer les produits qui ont des images, car certains de mes produits n'ont pas encore d'images. Je souhaiterais donc afficher en premier les produits avec des images. Merci pour votre réponse. Julien 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