override searchProvider.php不起作用

问题描述 投票:0回答:1

创建:override / modules / ps_facetedsearch / src / Product / SearchProvider.php

创建:override / modules / ps_facetedsearch / ps_facetedsearch.php

手动删除缓存

版本:1.7.6.4

覆盖SearchProvider.php无效

覆盖ps_facetedsearch.php工作

我需要将2种排序方式删除到... [[SearchProvider.php:getAvailableSortOrders()中,但我从不通过重载函数

if (!defined('PS_VERSION')) exit; class SearchProviderOverride extends SearchProvider { /** * @return array */ public function getAvailableSortOrders() { $sortPosAsc = new SortOrder('product', 'position', 'asc'); $sortPriceAsc = new SortOrder('product', 'price', 'asc'); $sortPriceDesc = new SortOrder('product', 'price', 'desc'); $translator = $this->module->getTranslator(); die('hello not world!'); return [ $sortPosAsc->setLabel( $translator->trans('Relevance', [], 'Modules.Facetedsearch.Shop') ), $sortPriceAsc->setLabel( $translator->trans('Price, low to high', [], 'Shop.Theme.Catalog') ), $sortPriceDesc->setLabel( $translator->trans('Price, high to low', [], 'Shop.Theme.Catalog') ), ]; } }```
prestashop
1个回答
0
投票
您应该重写“ runQuery”方法,因为它是唯一使用“ getAvailableSortOrders”的方法。这样,您覆盖的“ runQuery”将调用相应的“ getAvailableSortOrders”方法。

最后,您可以将您的“ getAvailableSortOrders”设为私有,因为它仅用于该类。

if (!defined('PS_VERSION')) exit; class SearchProviderOverride extends SearchProvider { /** * @return array */ private function getAvailableSortOrders() { $sortPosAsc = new SortOrder('product', 'position', 'asc'); $sortPriceAsc = new SortOrder('product', 'price', 'asc'); $sortPriceDesc = new SortOrder('product', 'price', 'desc'); $translator = $this->module->getTranslator(); die('hello not world!'); return [ $sortPosAsc->setLabel( $translator->trans('Relevance', [], 'Modules.Facetedsearch.Shop') ), $sortPriceAsc->setLabel( $translator->trans('Price, low to high', [], 'Shop.Theme.Catalog') ), $sortPriceDesc->setLabel( $translator->trans('Price, high to low', [], 'Shop.Theme.Catalog') ), ]; } /** * @param ProductSearchContext $context * @param ProductSearchQuery $query * * @return ProductSearchResult */ public function runQuery( ProductSearchContext $context, ProductSearchQuery $query ) { $result = new ProductSearchResult(); // extract the filter array from the Search query $facetedSearchFilters = $this->filtersConverter->createFacetedSearchFiltersFromQuery($query); $context = $this->module->getContext(); $facetedSearch = new Search($context); // init the search with the initial population associated with the current filters $facetedSearch->initSearch($facetedSearchFilters); $orderBy = $query->getSortOrder()->toLegacyOrderBy(false); $orderWay = $query->getSortOrder()->toLegacyOrderWay(); $filterProductSearch = new Filters\Products($facetedSearch); // get the product associated with the current filter $productsAndCount = $filterProductSearch->getProductByFilters( $query->getResultsPerPage(), $query->getPage(), $orderBy, $orderWay, $facetedSearchFilters ); $result ->setProducts($productsAndCount['products']) ->setTotalProductsCount($productsAndCount['count']) ->setAvailableSortOrders($this->getAvailableSortOrders()); // now get the filter blocks associated with the current search $filterBlockSearch = new Filters\Block( $facetedSearch->getSearchAdapter(), $context, $this->module->getDatabase() ); $idShop = (int) $context->shop->id; $idLang = (int) $context->language->id; $idCurrency = (int) $context->currency->id; $idCountry = (int) $context->country->id; $idCategory = (int) $query->getIdCategory(); $filterHash = md5( sprintf( '%d-%d-%d-%d-%d-%s', $idShop, $idCurrency, $idLang, $idCategory, $idCountry, serialize($facetedSearchFilters) ) ); $filterBlock = $filterBlockSearch->getFromCache($filterHash); if (empty($filterBlock)) { $filterBlock = $filterBlockSearch->getFilterBlock($productsAndCount['count'], $facetedSearchFilters); $filterBlockSearch->insertIntoCache($filterHash, $filterBlock); } $facets = $this->filtersConverter->getFacetsFromFilterBlocks( $filterBlock['filters'] ); $this->labelRangeFilters($facets); $this->addEncodedFacetsToFilters($facets); $this->hideUselessFacets($facets, (int) $result->getTotalProductsCount()); $facetCollection = new FacetCollection(); $nextMenu = $facetCollection->setFacets($facets); $result->setFacetCollection($nextMenu); $result->setEncodedFacets($this->facetsSerializer->serialize($facets)); return $result; } }

© www.soinside.com 2019 - 2024. All rights reserved.