julianbaros Posted November 3, 2017 Share Posted November 3, 2017 Bonjour à tous, J'ai besoin d'un peu d'aide de la communauté. Je précise dans un premier temps que le développement n'est pas mon point fort mais je vais être obliger d'y passer pour ma demande. Je dispose d'un site e-commerce avec environ 360000 références produits. J'ai des produits sans photo du fait de la spécificité des pièces que nous proposons. Donc quand nous n'avons pas la photo, par défaut, il y a mon logo qui s'ajoute à la place de la photo. Maintenant, ce que je souhaite faire, c'est modifier l'affichage de mes pièces, n'importe où où je me trouve sur le site pour afficher tous les produits avec photos en premier et ensuite celles qui n'ont pas d'images. Je pense que cette modification doit être faite dans le fichier product.tpl, mais je souhaiterais une confirmation. Je pense même qu'il faut faire une fonction avec une requête SQL afin de récupérer les produits avec images en premier. Pouvez-vous m'aider s'il vous plait ? Dites moi si vous avez besoin de fichiers. Link to comment Share on other sites More sharing options...
Matt K. Posted November 3, 2017 Share Posted November 3, 2017 Bonjour, Est-ce que c'est vous qui ajoutez manuellement votre logo dans le produit quand il n'y a pas de visuel ou est-ce que c'est un développement spécifique qui affiche automatiquement votre logo quand le produit n'a pas d'image ? Je penche plus pour la seconde option mais c'est pour être sûr. Merci ! Link to comment Share on other sites More sharing options...
julianbaros Posted November 6, 2017 Author Share Posted November 6, 2017 Bonjour, C'est un développement spécifique qui fait que quand on ajoute un produit sur le site et qu'il n'a pas de photo, il remplace l'emplacement vide par le logo. Si vous avez besoin je peux vous fournir les parties de code concernés. D'avance merci. Link to comment Share on other sites More sharing options...
julianbaros Posted November 9, 2017 Author Share Posted November 9, 2017 On 03/11/2017 at 5:33 PM, Matt K. said: Bonjour, Est-ce que c'est vous qui ajoutez manuellement votre logo dans le produit quand il n'y a pas de visuel ou est-ce que c'est un développement spécifique qui affiche automatiquement votre logo quand le produit n'a pas d'image ? Je penche plus pour la seconde option mais c'est pour être sûr. Merci ! Bonjour, C'est bien un développement spécifique qui affiche automatiquement notre logo quand le produit n'a pas d'image. Du coup, avez-vous une idée pour afficher les produits avec photo en premier svp ? Vous en remerciant par avance. Julien Link to comment Share on other sites More sharing options...
Matt K. Posted November 10, 2017 Share Posted November 10, 2017 Bonjour, J'ai bien une piste mais il me faudrait un peu de temps pour me pencher dessus. Une version simple : remplacer cette ligne https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Category.php#L779 Par $sql .= ' ORDER BY id_image DESC, '.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; Le défaut de cette méthode est que la catégorie sera d'abord filtrée par image (produits ayant l'image la plus récente en premier) donc tu perd le filtrage par date, prix. etc. Pas le temps pour le moment de proposer mieux (désolé!) mais ça peut te donner une piste Bon courage ! 1 Link to comment Share on other sites More sharing options...
julianbaros Posted November 14, 2017 Author Share Posted November 14, 2017 (edited) Bonjour, Merci pour votre retour. J'ai effectué ma modification sur ma boutique en local avant toute chose. à chaque fois que j'ajoutais une photo sur un produit le produit remontait bien dans les premières positions. SUPER ! J'ai donc mis la même ligne de code à la place de l'autre dans mon fichier sur le site sur le serveur. Et là, ça à fait complétement planter le site, page toute blanche sans rien. Nous avons mis du temps avant de retrouver une version stable de notre site et avons pu le récupérer. Maintenant c'est une petite modification qui ne devrait pas avoir d'incidence à ce point sur le site. Du coup je n'ose pas retenter l'opération. J'ai pensé à une autre solution. Dans Préférences / Produits et onglet Pagination, il y a moyen de filtrer les produits par articles, prix du produits, etc. mais il n'y a pas par images. Serait-il possible de faire une fonction pour avoir cette option dans pagination ? Ce serait peut être judicieux, qu'en pensez-vous ? Si oui, dans quel fichier faut-il effectuer cette modification ? D'avance merci pour votre retour. Julien Edited November 14, 2017 by julianbaros (see edit history) Link to comment Share on other sites More sharing options...
Matt K. Posted November 14, 2017 Share Posted November 14, 2017 Salut ! Désolé que tu ais eu tant de soucis ! Oui l'idéal serait de faire un vrai filtre que le client pourrait aussi retrouver en front mais ça va demander plus de retouche à ton site que ma petite ligne de précèdent commentaire. ^^ A vu de nez, il faudrait modifier Category.php (ajout filtrage par image), category.tpl (ajout du choix du filtre) et modification en BO pour ajouter le nouveau filtre par défaut. Link to comment Share on other sites More sharing options...
julianbaros Posted November 14, 2017 Author Share Posted November 14, 2017 (edited) Oui effectivement. Ce sont des choses qui arrivent quand on touche au code. Pourtant c'est étonnant que cette modification ait faite beuger le site comme ça. Pour le moment je me suis remis sur mon site en local. J'ai trouvé le fichier à modifier, à savoir AdminPPreferencesController.php dans /controllers/admin/, pour ajouter une nouvelle option dans le BO pour filtrer par image : 'PS_PRODUCTS_ORDER_BY' => array( 'title' => $this->l('Default order by'), 'hint' => $this->l('The order in which products are displayed in the product list.'), 'type' => 'select', 'list' => array( array('id' => '0', 'name' => $this->l('Product name')), array('id' => '1', 'name' => $this->l('Product price')), array('id' => '2', 'name' => $this->l('Product add date')), array('id' => '3', 'name' => $this->l('Product modified date')), array('id' => '4', 'name' => $this->l('Position inside category')), array('id' => '5', 'name' => $this->l('Manufacturer')), array('id' => '6', 'name' => $this->l('Product quantity')), array('id' => '7', 'name' => $this->l('Product image')), /*Ajout de cette ligne*/ array('id' => '8', 'name' => $this->l('Product reference')) ), L'ajout de ma ligne me permet d'avoir cette option dans le BO dans Préférences > Produits > Pagination mais ne me permet pas encore de filtrer sur le front. Maintenant, je souhaiterais que lorsque je sélectionne cette option dans le BO elle soit appliqué sur le front. Quels fichiers dois-je modifier en conséquence svp ? Edited November 14, 2017 by julianbaros (see edit history) Link to comment Share on other sites More sharing options...
julianbaros Posted November 23, 2017 Author Share Posted November 23, 2017 On 14/11/2017 at 2:27 PM, Matt K. said: Salut ! Désolé que tu ais eu tant de soucis ! Oui l'idéal serait de faire un vrai filtre que le client pourrait aussi retrouver en front mais ça va demander plus de retouche à ton site que ma petite ligne de précèdent commentaire. ^^ A vu de nez, il faudrait modifier Category.php (ajout filtrage par image), category.tpl (ajout du choix du filtre) et modification en BO pour ajouter le nouveau filtre par défaut. Finalement ça a fini par fonctionner :-). Le seul HIC, si je puis dire, c'est que ça ne me l'a pas fait sur toutes les pages de mon site et je ne sais pas pourquoi ... Link to comment Share on other sites More sharing options...
Matt K. Posted November 24, 2017 Share Posted November 24, 2017 Salut ! Cool ! C'est ta solution ou la mienne qui a fini par fonctionnée ? Curieux que ça le fasse pas partout... :/ Link to comment Share on other sites More sharing options...
julianbaros Posted November 24, 2017 Author Share Posted November 24, 2017 (edited) C'est ta solution qui a fonctionné. Oui je trouve cela étrange. La différence avec les pages qui ne fonctionne pas c'est parce que dans le menu j'ai un onglet constructeur. Mon menu est géré avec le module advance top menu. Dans cet onglet, je récupère uniquement les fabricants. Du coup je pense qu'il appelle la page manufacturer.php et non category.php. J'ai essayer d'utiliser le même bout de code pour mettre dans la page manufacturer.php mais ça ne fonctionne pas. Aurais-tu une solution pour le fichier manufacturer.php pour filtrer également par produits avec photo stp ? Edited November 27, 2017 by julianbaros (see edit history) Link to comment Share on other sites More sharing options...
Pierre_d Posted November 30, 2017 Share Posted November 30, 2017 Pour le site que je développe, j'ai eu un besoin similaire, bien que plus complexe. Je devais pouvoir filtrer les produits selon un critère qui n'existait même pas dans PS. (Attention, je travaille avec PS 1.7). J'ai résolu le problème en créant un module spécifique dans lequel j'enregistre un hook "ProductSearchProvider". Celui-ci est alors appelé à la place du provider par défaut. L'avantage, c'est que cette méthode fonctionne partout dans le FO puisqu'elle est appelée par CategoryController, ProductController et SearchController. En plus, en cas d'upgrade de PS, cela continue à fonctionner. L'inconvénient, c'est qu'il faut se creuser la tête... ;). Pour ma part, j'ai été voir le module natif "ps_FacetedSearch" et j'en ai copié le comportement. Mon module implémente un ProductSearchProvider. En résumé, c'est beaucoup moins facile, mais c'est beaucoup plus puissant et robuste. Link to comment Share on other sites More sharing options...
julianbaros Posted November 30, 2017 Author Share Posted November 30, 2017 Bonjour, Merci pour votre réponse. Pour mon cas , je ne suis pas sur d'avoir à créer un nouveau module. Il me suffit de modifier la fonction getproducts dans le fichier manufacturer.tpl en modifiant la requete sql, afin qu'il m'affiche en premier les produits avec photos, comme la solution qu'on a trouvé dans un premier temps. 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