Вы можете добавить пользовательскую сортировку по опции, переопределив модуль Ps_Facetedsearch
.
Вы можете выполнить следующие шаги, чтобы добавить пользовательскую сортировку по порядку.
1) Добавить файл ps_facetedsearch.php
в папкуoverride/modules/ps_facetedsearch
;(создайте папки, если они не существуют) и код ниже в этом файле.
<?php
/**
* @override Ps_Facetedsearch
*/
if (!defined('_PS_VERSION_')) {
exit;
}
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, 'src', 'Ps_FacetedsearchProductSearchProvider.php',
));
class Ps_FacetedsearchOverride extends Ps_Facetedsearch
{
public function hookProductSearchProvider($params)
{
$query = $params['query'];
// do something with query,
// e.g. use $query->getIdCategory()
// to choose a template for filters.
// Query is an instance of:
// PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery
if ($query->getIdCategory()) {
return new Ps_FacetedsearchProductSearchProviderOverride($this);
} else {
return null;
}
}
}
2) Добавьте файл Ps_FacetedsearchProductSearchProvider.php
в папку override/modules/ps_facetedsearch/src
;(создайте папки, если они не существуют) и добавьте в них код ниже.
<?php
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchProductSearchProvider.php',
));
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchFiltersConverter.php',
));
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchFacetsURLSerializer.php',
));
use PrestaShop\PrestaShop\Core\Product\Search\URLFragmentSerializer;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchProviderInterface;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchResult;
use PrestaShop\PrestaShop\Core\Product\Search\Facet;
use PrestaShop\PrestaShop\Core\Product\Search\FacetCollection;
use PrestaShop\PrestaShop\Core\Product\Search\Filter;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
class Ps_FacetedsearchProductSearchProviderOverride extends Ps_FacetedsearchProductSearchProvider
{
private $module;
public function __construct(Ps_Facetedsearch $module)
{
$this->module = $module;
}
public function runQuery(
ProductSearchContext $context,
ProductSearchQuery $query
) {
$facetedSearch = new Ps_FacetedsearchProductSearchProvider($this->module);
$result = $facetedSearch->runQuery($context, $query);
$sortOrders = $this->getAvailableSortOrders();
foreach ($sortOrders as $sortOrder) {
$result->addAvailableSortOrder($sortOrder);
}
return $result;
}
/**
* New sort order that needs to be appended
*
* @return array
*/
private function getAvailableSortOrders()
{
return [
// add your custom sort by orders here;
];
}
}
3) Убедитесь, что overrides
включен в бэкэнде;из Расширенные параметры> Производительность
4) Чтобы загрузить переопределения, вам нужно re-index
автозагрузки и для этого вам нужно удалить файл class_index.php
;удалить файл class_index.php
из папок var/cache/dev
и var/cache/prod
.
5) Проверить магазин;Будет добавлен новый пользовательский порядок сортировки.
Надеюсь, это поможет!