Magento 2 Сортировка товаров по цене от высокой до низкой
Я установил сортировку по умолчанию по цене в admin , но все равно мне нужно отсортировать цену от высокой к низкой. Magento по умолчанию сортирует его от низкого к высокому. я пытаюсь найти опцию в admin, но не могу ее найти. может ли кто-нибудь сказать мне код для этого, чтобы сделать сортировку по умолчанию от высокой к низкой? Я использую тему порту для своего магазина.
3 answers
Скопируйте файл vendor/magento/module-catalog/view/frontend/layout/catalog_category_view.xml
в свою тему, т.е.; app/design/frontend/{{Namespace}}/{{Theme}}/Magento_Catalog/layout/catalog_category_view.xml
.
И поместите следующий код в XML-файл.
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<referenceBlock class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list">
<action method="setDefaultDirection">
<argument name="dir" xsi:type="string">desc</argument>
</action>
</referenceBlock>
</referenceContainer>
</body>
</page>
Для инвертирования вашего результата из ASC в Desc во время загрузки. Просто добавьте этот код в свой расширенный Magento_Catalog/layout/catalog_category_view.xml
<body>
...
<referenceContainer name="content">
<referenceBlock class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list">
<action method="setDefaultDirection">
<argument name="dir" xsi:type="string">desc</argument>
</action>
</referenceBlock>
</referenceContainer>
...
</body>
Вам необходимо переопределить функцию getavailableorder() и setcollection() Magento
/vendor/magento/module-catalog/Block/Product/ProductList/Toolbar.php
Ниже приведен код, который может вам помочь.
public function aroundGetAvailableOrders(\Magento\Catalog\Block\Product\ProductList\Toolbar $subject, \Closure $proceed)
{
$returnValue = $proceed();
unset($returnValue['price']);
$returnValue['priceDesc'] = 'price - high to low';
$returnValue['priceAsc'] = 'price - low to high';
return $returnValue;
}
public function aroundSetCollection(\Magento\Catalog\Block\Product\ProductList\Toolbar $subject, \Closure $proceed, $collection)
{
$returnValue = $proceed($collection);
if ($subject->getCurrentOrder() == 'priceHighToLow') {
$collection->addAttributeToSelect('*')->setOrder('price', 'ASC');
$collection->load();
}
return $collection;
}