* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ use PrestaShop\PrestaShop\Adapter\Search\SearchProductSearchProvider; use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery; use PrestaShop\PrestaShop\Core\Product\Search\SortOrder; class SearchControllerCore extends ProductListingFrontController { /** @var string */ public $php_self = 'search'; public $instant_search; public $ajax_search; protected $search_string; protected $search_tag; /** * Assign template vars related to page content. * * @see FrontController::initContent() */ public function init() { parent::init(); $this->search_string = Tools::getValue('s'); if (!$this->search_string) { $this->search_string = Tools::getValue('search_query'); } $this->search_tag = Tools::getValue('tag'); $this->context->smarty->assign( [ 'search_string' => $this->search_string, 'search_tag' => $this->search_tag, 'subcategories' => [], ] ); } public function getCanonicalURL(): string { return $this->buildPaginatedUrl($this->context->link->getPageLink('search', null, null, ['s' => $this->search_string])); } /** * Ensure that no search results page is indexed by search engines. */ public function getTemplateVarPage() { $page = parent::getTemplateVarPage(); $page['meta']['robots'] = 'noindex'; return $page; } /** * Performs the search. */ public function initContent() { parent::initContent(); $this->doProductSearch('catalog/listing/search', ['entity' => 'search']); } /** * @return ProductSearchQuery */ protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query ->setQueryType('search') ->setSortOrder(new SortOrder('product', 'position', 'desc')) ->setSearchString($this->search_string) ->setSearchTag($this->search_tag); return $query; } /** * @return SearchProductSearchProvider */ protected function getDefaultProductSearchProvider() { return new SearchProductSearchProvider( $this->getTranslator() ); } public function getListingLabel() { return $this->getTranslator()->trans('Search results', [], 'Shop.Theme.Catalog'); } public function getBreadcrumbLinks() { $breadcrumb = parent::getBreadcrumbLinks(); $breadcrumb['links'][] = [ 'title' => $this->getTranslator()->trans('Search results', [], 'Shop.Theme.Catalog'), 'url' => $this->getCurrentUrl(), ]; return $breadcrumb; } }