Traineau Posted September 2, 2019 Share Posted September 2, 2019 (edited) Bonjour, Ayant besoin d'une recherche spécifique pour une boutique (en fonction d'une durée, d'une thématique et d'une date), j'ai voulu créer un module de recherche custom basé sur le module ps_searchbar (PrestaShop 1.7.6), que j'ai nommé "search" Voici donc le code de ce module, on commence par search.php : if (!defined('_PS_VERSION_')) { exit; } class Search extends Module{ public function __construct(){ $this->author = 'kernix'; $this->name = 'search'; $this->version = '0.1.0'; $this->need_instance = 0; parent::__construct(); $this->context = Context::getContext(); $this->displayName = 'Barre de recherche'; $this->description = 'Gestion de la barre de recherche en haut de page'; $this->confirmUninstall = 'Êtes-vous sûr de vouloir désinstalelr ce module ?'; } public function install(){ return parent::install() && $this->registerHook('displayHeader') && $this->registerHook('displayTop') && $this->registerHook('displayHome'); } public function uninstall(){ return parent::uninstall() && $this->unregisterHook('displayHeader') && $this->unregisterHook('displayTop') && $this- >unregisterHook('displayHome'); } public function hookHeader(){ $this->page_name = Dispatcher::getInstance()->getController(); if ($this->page_name == 'index') { $this->_assignMedia(); } } protected function _assignMedia(){ $this->context->controller->addCss(($this->_path) . 'views/css/search-filter.css'); } public function hookDisplayHome(){ $type = Feature::getFeature($this->context->language->id, 1); $duration = Feature::getFeature($this->context->language->id, 3); $typeList = FeatureValue::getFeatureValuesWithLang($this->context->language->id, 1); $durationList = FeatureValue::getFeatureValuesWithLang($this->context->language->id, 3); $typeSelected = Tools::getValue('type'); $durationSelected = Tools::getValue('duration'); $arrival = Tools::getValue('arrival'); $this->context->smarty->assign([ 'type_selected' => $typeSelected, 'type_list' => $typeList, 'duration_selected' => $durationSelected, 'duration_list' => $durationList, 'arrival' => $arrival, ]); return $this->display(__FILE__, 'search-filter.tpl'); } } Et enfin mon template : <!-- Block search filter --> <div id="search-filter"> <div class="container"> <section class="search-toolbar"> <form method="get" action="{$link->getPageLink('search', true)|escape:'html'}" id="advancedsearchform"> <input type="hidden" name="controller" value="search"> <div class="flex"> <div class="fields"> <div class="form-group"> <label for="type">Envie</label> <div class="form-select"> <select class="form-control selectpicker" name="type" id="type"> <option value=""> ------ </option> {foreach from=$type_list key=id_feature_value item=attribute} <option value="{$attribute.id_feature_value|intval}" {if ($type_selected === $attribute.id_feature_value)} selected="selected"{/if}> {$attribute.value}</option> {/foreach} </select> </div> </div> <div class="form-group"> <label for="duration">Durée</label> <div class="form-select"> <select class="form-control selectpicker" name="duration" id="duration"> <option value=""> ------ </option> {foreach from=$duration_list key=id_feature_value item=duration} <option value="{$duration.id_feature_value|intval}" {if ($duration_selected === $duration.id_feature_value)} selected="selected"{/if}> {$duration.value}</option> {/foreach} </select> </div> </div> <div class="form-group"> <div class="form-date"> <label for="start_date">Arrivée</label> <input class="form-control" type="date" value="{$arrival}" placeholder="2019-08-19" name="arrival" id="arrival"> </div> </div> </div> <div class="actions"> <input type="hidden" name="s" value="*"> <button class="btn-search form-control" type="submit"> <i class="icon-loupe"></i> <span>Rechercher</span> </button> </div> </div> </form> </section> </div> </div> <!-- /Block search filter --> De ce que j'ai compris on a besoin que de ces deux fichiers, le reste étant gérer par le controller Search. Maintenant, lorsque je fais ma recherche mes paramètres sont biens envoyés et je tombe sur la bonne url, telle que :http://localhost/fr/recherche?controller=search&type=6&duration=&arrival=&s=* Mais je tombe sur l'erreur citée dans le titre. J'ai suivi tout le chemin de ma requête dans le code, tout a l'air bon. L'erreur provient de l'appel de la fonction find de Search dans le fichier src/Adapter/Search/SearchProductSearchProvider.php. J'ai essayé pas mal de choses mais rien n'y fait... Si quelqu'un aurait une idée ou déjà tenté ce genre de chose. J'ai également remarquer un comportement étrange : Si j'active le module de base ps_searchbar ainsi que mon module search, je me tape cette erreur a chaque fois dès que je tente d'accèder a l'URL recherche, cependant si je désactive mon module, je peux utiliser ps_searchbar pour faire mes recherches tout à fait normalement. Mon module seul ne marche pas, le problème vient donc de lui. Merci d'avance. Edited September 2, 2019 by Traineau (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted September 2, 2019 Share Posted September 2, 2019 Donner le nom de sa classe avec le même nom qu'une classe du coeur ne peut que vous poser des problèmes... la propriété find() appartient à searcheCore. 1 Link to comment Share on other sites More sharing options...
Traineau Posted September 2, 2019 Author Share Posted September 2, 2019 Mince c'était aussi bête... Effectivement après renommage tout roule 😓merci bien ! 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