Presta260 Posted March 9, 2014 Share Posted March 9, 2014 Bonjour à tous, voici mon premier post sur Prestashop et j'espere qu'il ne soit pas le dernier Je ne suis pas programmeur je suis juste un bidouilleur du dimanche et il y a un problème auquel je n'y arrive pas et c'est au dessus de mes connaissances. Et ça me rend fou !! Je souhaiterais savoir si cela serait possible que le module BLOCKSEARCH fasse une recherche dans les catégories et non dans les produits? J'ai essayer de chercher dans le fichier class/search.php d'apres un tuto que j'ai trouvé sur internet qui permettait à ce que le module de recherche puisse chercher dans les déclinaisons des fiches de produits, mais je n'ai pas réussit à modifier pour qu'il cherche dans les catégories, ça demande du code SQL et la je suis perdu. Es que quelqu'un aurait une idée ? Merci à vous pour vos réponses Link to comment Share on other sites More sharing options...
math_php Posted March 10, 2014 Share Posted March 10, 2014 Bonjour, Normalement il faudrait faire un override de SearchController pour ne pas modifier le core. La modification porterait directement sur la classe search ? C'est possible mais après le controller attend des liens vers des produits pas vers des catégories (d'ou préférence pour l'override). Pour le sql : $sql ="SELECT id_category, name, description,link_rewrite FROM `"._DB_PREFIX_."category_lang` WHERE id_shop=$id_shop, id_lang=$id_lang, name like '%$search%'" Il faut obtenir l'id_shop et id_lang et faire attention à la recherche qui peut ouvrir une très grosse faille de sécurité (sql injection). Limite la recherche a des lettres et chiffres et à aucun autre caractère. Bon développement Link to comment Share on other sites More sharing options...
Presta260 Posted March 10, 2014 Author Share Posted March 10, 2014 Salut Math_php ! Merci pour ta réponse ,c'est cool de ta part de prendre du temps et reflechir sur mon problème. Tu as raison pour l'override afin de ne pas modifier le core. Ceci dit ton code SQL je ne sais pas où exactement l'inserer car sur le tuto il demande de modfier seulement ces 2 lignes pour affiner la recherche: Dans ce nouveau fichier Search.php, à la ligne 344 vous verrez la fonction getAttributes qu’il faut modifier. Remplacez la ligne 351 : SELECT al.name FROM '._DB_PREFIX_.'product_attribute papar : SELECT al.name, pa.ean13, pa.reference, pa.upc FROM '._DB_PREFIX_.'product_attribute pa Puis remplacez la ligne 357 : $attributes .= $attribute['name'].' ‘;par : $attributes .= $attribute['name'].' '.$attribute['ean13'].' '.$attribute['reference'].' '.$attribute['upc'].' ‘; Es qu'il y a une possibilité d'inserer une partie de ton code dans ces deux lignes ? Merci encore Link to comment Share on other sites More sharing options...
math_php Posted March 10, 2014 Share Posted March 10, 2014 (edited) La solution que j'avais choisi c'était de laisser la recherche récupérer les réponses dans les produits et de rajouter mes résultats à ces réponses. On peut également supprimer les réponses 'produits' Override de SearchController.php : <?php class SearchController extends SearchControllerCore { public function initContent() { if ($this->ajax_search) { $query = Tools::replaceAccentedChars(urldecode(Tools::getValue('q'))); $searchResults = Search::find((int)(Tools::getValue('id_lang')), $query, 1, 10, 'position', 'desc', true); foreach ($searchResults as &$product) $product['product_link'] = $this->context->link->getProductLink($product['id_product'], $product['prewrite'], $product['crewrite']); // Ici je complète avec mes réponses $sql ="SELECT id_category, name, description,link_rewrite FROM `"._DB_PREFIX_."category_lang` WHERE id_shop=$id_shop, id_lang=$id_lang, name like '%$query%'" $categories = Db::getInstance()->executeS($sql); foreach ($categories as $category){ $searchResults[] = array('id_product' => '' , 'pname' =>$category['description'], 'cname' => $category['name'] , 'crewrite'=>'' ,'prewrite' =>'', 'product_link'=> $lien_vers_category); } die(Tools::jsonEncode($searchResults)); } parent::initContent(); } } Attention $query n'est pas du tout sécurisé. Edited March 10, 2014 by math_php (see edit history) Link to comment Share on other sites More sharing options...
Presta260 Posted March 10, 2014 Author Share Posted March 10, 2014 Je sais pas si c'est moi qui est fait une mauvaise manipe, mais du coup je reçois une page blanche. J'ai remplacer le code ci-dessous du fichier SearchController.php par ton code est ça passe pas, encore une fois je m'excuse mais je suis qu'un bidouilleur du dimanche <?php class SearchControllerCore extends FrontController { public $php_self = 'search'; public $instant_search; public $ajax_search; /** * Initialize search controller * @see FrontController::init() */ public function init() { parent::init(); $this->instant_search = Tools::getValue('instantSearch'); $this->ajax_search = Tools::getValue('ajaxSearch'); if ($this->instant_search || $this->ajax_search) { $this->display_header = false; $this->display_footer = false; } } Link to comment Share on other sites More sharing options...
math_php Posted March 11, 2014 Share Posted March 11, 2014 Nan c'est dans le dossier override/controllers/front/ qu'il faut créer un fichier. SearchController.php avec le code fourni Link to comment Share on other sites More sharing options...
Presta260 Posted March 11, 2014 Author Share Posted March 11, 2014 Bah c'est ce que j'ai fais au début mais c 'est comme si que le override n'est pas pris en compte ou peut être que ça le prend en compte mais ça n'affiche pas les catégories Es que ça marche chez toi ? si tu veux je peux te passer l'url du site pour que tu puisses jeter un coup d'oeil on sait jamais En tout cas merci encore, ça fait plaisir de voir que la solidarité existe toujours Link to comment Share on other sites More sharing options...
Pecheur Posted March 12, 2014 Share Posted March 12, 2014 (edited) Bonjour,Je me permet de participer à votre sujet car je me pose le même genre de question, est il possible d'inclure les pages de CMS dans les résultats de recherche, en plus des produits ? Est ce également une requête SQL à modifier ? Si quelqu'un à une astuce ce serait vraiment avec plaisir. Bonne journée Rom Edited March 12, 2014 by Pecheur (see edit history) Link to comment Share on other sites More sharing options...
math_php Posted March 12, 2014 Share Posted March 12, 2014 C'est possible, mais la recherche se porte sur quoi le titre du cms, le contenu, les deux ? Faut il inclure la recherche produit également ? Pour quelle version de prestashop ? Link to comment Share on other sites More sharing options...
Pecheur Posted March 12, 2014 Share Posted March 12, 2014 Merci pour ta réponse, Idéalement je souhaite rechercher dans les titres et dans les contenus de mes pages CMS. J'aimerai que les résultats s'affichent en plus des résultats de produits par défaut. J'utilise la version 1.4.9.0 Link to comment Share on other sites More sharing options...
Pecheur Posted March 18, 2014 Share Posted March 18, 2014 Hello, Je me permet de relancer car je patine toujours sur ce champ de recherche pour y inclure mes pages CMS. Quelqu'un aurait un semblant de piste ? Bon courage Link to comment Share on other sites More sharing options...
Presta260 Posted March 18, 2014 Author Share Posted March 18, 2014 Salut Pecheur, On a un problème qui demande des connaissance très approfondie en SQL ou en php mais si ça peut t'aider et si c 'est urgent il y a des modules payant qui permette d'avoir un bloc de recherche puissant Link to comment Share on other sites More sharing options...
Pecheur Posted March 18, 2014 Share Posted March 18, 2014 Salut Presta, Oui j'ai repéré quelques modules qui pourraient faire l'affaire, mais ils sont trop sophistiqués pour mes besoins, je voulais simplement retourner une liste de page CMS en plus des produits... Mais je trouve ça super frustrant de ne pas pouvoir le faire moi même. Comme tu le dis si bien, mes compétences semblent limitées, je pensais que quelqu'un sur ce forum, aurait une astuce ou une piste pour m'aider à modifier ce module. J'ai du mal à croire qu'il faille obligatoirement en passer par un module. Sinon j'ai bien repéré cette astuce : http://www.prestashop.com/forums/topic/123487-recherche-rapide-et-page-cms/ Mais elle ne permet d'afficher qu'un champ de recherche spécifique aux pages CMS. J'en passerai par là si besoin mais c'est un gros frein pour ma boutique et l'importance des pages CMS de mon site. Tu as réussi à modifier ta recherche pour catégories ? Link to comment Share on other sites More sharing options...
math_php Posted March 18, 2014 Share Posted March 18, 2014 Bon alors ça marche ou quoi @Presta260 : le code indiqué c'est pour un override, c'est pas pour remplacer le code du SearchController. Si tu as un doute sur le fait que l'override est exécuté, mets des var_dump('youpi'); Ca pertube l'affichage et/ou les requetes ajax et ça permet de savoir si effectivement ton code est exécuté. Idem que pour pecheur suivant les versions de prestashop, le code présente des variations, donc c'est difficile de livrer pour un code inconnu surtout si tu veux pas faire d'override @Pecheur : c'est pas que je veuille pas t'aider mais il faudrait que j'installe un 1.4.9 pour travailler, puis créer des cms... juste pour avoir un environnement ou tester. Au total il faudrait fournir votre fichier SearchController.php pour que je puisse vous faire l'override. 1 Link to comment Share on other sites More sharing options...
Pecheur Posted March 18, 2014 Share Posted March 18, 2014 Salut Math, Sympa de ta part de filer un coup de main Link to comment Share on other sites More sharing options...
Pecheur Posted March 18, 2014 Share Posted March 18, 2014 Voilà le fichier Merci beaucoup SearchController.php Link to comment Share on other sites More sharing options...
Presta260 Posted March 18, 2014 Author Share Posted March 18, 2014 Salut Math_php !! ça fait plaisir de te revoir parmis nous .. Même avec des var_dump('youpi'); ça ne perturbe rien dutout, le override n'est donc pas pris en compte, es que c'est normale ? @Pecheur Comme tu peux le voir je n'ai toujours pas de solution parcontre il peux avoir une alternative, c'est de dupliquer tous mes produits et inserer le nom des catégories dans la référence produits (un peu barbare mais ça marche). Et oui c'est frustrant de pas pour y remédier soit même Sinon je sais pas si cela peut t'aider, mais dans le lien que tu m'a envoyé, la personne explique clairement qu'elle souhaite séparer le champ de recherche des CMS des pages CMS en modifiant CMSController.php . Es que tu as essayer de refaire ça manipe sans modifier ce fichier ? Link to comment Share on other sites More sharing options...
Pecheur Posted March 18, 2014 Share Posted March 18, 2014 Oui j'ai tenté de bricoler son code pour l'adapter à mes besoins, mais je me suis ramassé comme une brêle !Il faut se rendre à l'évidence, cette fonctionnalité dépasse mes compétences. Link to comment Share on other sites More sharing options...
math_php Posted March 19, 2014 Share Posted March 19, 2014 @pecheur : J'ai pas de 1.4 qui tourne donc j'ai pas pu tester mais tu peux essayer ça dans ton SearchController Le code ci dessous entre ajaxSearch et Die if ($this->ajaxSearch) { self::$link = new Link(); $searchResults = Search::find((int)Tools::getValue('id_lang'), $query, 1, 10, 'position', 'desc', true); foreach ($searchResults as &$product) $product['product_link'] = self::$link->getProductLink($product['id_product'], $product['prewrite'], $product['crewrite']); die(Tools::jsonEncode($searchResults)); Doit ressembler après modif à ça : if ($this->ajaxSearch) { self::$link = new Link(); $searchResults = Search::find((int)Tools::getValue('id_lang'), $query, 1, 10, 'position', 'desc', true); foreach ($searchResults as &$product) $product['product_link'] = self::$link->getProductLink($product['id_product'], $product['prewrite'], $product['crewrite']); //-------------------------------------- // Ajout recherche dans les cms à vos risques et périls. if (ValidateCore::isName($query)){ $more_search = Db::getInstance()->executeS("SELECT * FROM `"._DB_PREFIX_."cms_lang` where id_lang=".(int)(Tools::getValue('id_lang'))." and (content like '%$query%' or meta_title like'%$query%')"); foreach ($more_search as $cms){ $searchResults[] = array('id_product' => '' , 'pname' =>$cms['meta_title'], 'cname' => $cms['meta_description'] , 'crewrite'=>'' ,'prewrite' =>'', 'product_link'=> $base.__PS_BASE_URI__.'cms.php?id_cms='.$cms['id_cms'] ); } } //-------------------------------------- die(Tools::jsonEncode($searchResults)); Sauvegarde ton fichier avant modif. C'est pas un override mais ça pourrait en être un. En espérant que la structure Json est la même. @Presta260 : pas de bol, mais la programmation c'est ça, le premier bout de code que je t'avais transmis était pour du 1.5 et pas pour ton 1.4, ça ne pouvait pas marcher. 1 Link to comment Share on other sites More sharing options...
Presta260 Posted March 19, 2014 Author Share Posted March 19, 2014 (edited) Merci encore Math_php pour ta considération envers nos problèmes, c'est cool de ta part ! Pour répondre à ton message je suis en 1.5.6.2 donc je sais pas Edited March 19, 2014 by Presta260 (see edit history) Link to comment Share on other sites More sharing options...
Pecheur Posted March 19, 2014 Share Posted March 19, 2014 Salut, Math merci pour ce code, il fonctionne parfaitement avec la recherche Ajax !Je crois que ton post est d'utilité publique ! Je te remercie infiniment pour le temps passé. 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