Magento2: по умолчанию сортировка по цене по убыванию, а не по возрастанию


11

Итак, у меня есть категории сортировки по цене. По умолчанию в Magento 2 это цена возрастает. Но я бы предпочел, чтобы это происходило по убыванию цены.

Я уверен, что смогу сделать это, настроив catalog_category_view.xmlтему и указав аргумент, product_list_toolbarно я просто не могу понять это. Любая помощь?


2
используйте эти две ссылки mage2.pro/t/topic/1095 и mage2.pro/t/topic/1087/2 . это поможет вам
Манашви Бирла

Ответы:


24

Скопируйте файл:

продавец / Magento / модуль-каталог / вид / интерфейс / расположение / catalog_category_view.xml

в

приложение / дизайн / интерфейс / {{Vender_Namespace}} / {{THEME_NAME}} / Magento_Catalog / макет / catalog_category_view.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 name="category.products.list">
                <action method="setDefaultDirection">
                    <argument name="dir" xsi:type="string">desc</argument>
                </action>
            </referenceBlock>
        </referenceContainer>
        <move element="category.view.container" destination="content" before="-"/>
    </body>
</page>

Ссылки, которые Манашви указывает на правильные места в ядре для файлов, которые управляют этой функцией, но они не предоставляют решения. Я не нашел этого нигде в основном коде, поэтому я просто предположил, основываясь на коде в этом файле:

продавец / Magento / модуль-каталог / Block / Product / ProductList / Toolbar.php

и использовал синтаксис в другой конфигурации в других XML-файлах.

Я попытался позвонить $block->setDefaultDirection('desc')в файл:

продавец / Magento / модуль-каталог / просмотр / интерфейс / шаблоны / продукт / список / панель / sorter.phtml

файл, но это не сработало. Я не выяснил, почему, но с помощью xml, чтобы установить настройки по умолчанию, я просто перешел.


1
Просто быстрый вопрос @circlesix, ваше решение отлично работает, но я бы хотел применить его только к нескольким категориям. Я думал, что смогу зайти в раздел referenceContainer в раздел Обновление пользовательского макета для каждой категории в панели администратора, но это никак не повлияет. Любые идеи?
кофеин

Пока не нашли решения, я опубликую здесь, когда смогу найти лучший способ сделать это.
Circuix

1
@ user1837290, вы можете просто поставить чанк, начинающийся и заканчивающийся referenceContainerв поле «Layout Update XML» у администратора ваших конкретных категорий. Пока вы не отменяете глобальную сортировку в своей теме, она должна работать. Связанный: magento.stackexchange.com/q/167048/2415
Paws

1
@circlesix, вам нужно указывать атрибут имени только при ссылке на блок
Мигель Фелипе Гильен Кало

1
Просто хотел прокомментировать и сказать, что это все еще работает с Magento 2.3, он просто решил проблему для меня!
Дэниел Блэк

5

Вы также можете использовать более короткую версию. Для определенных категорий вы можете использовать отдельные файлы: catalog_category_view_id_X.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>
    <referenceBlock name="category.products.list">
        <action method="setDefaultDirection">
            <argument name="dir" xsi:type="string">desc</argument>
        </action>
    </referenceBlock>
</body>
</page>

Решение (использующее только ссылочный блок и содержащее содержимое) также может быть добавлено в пользовательский XML в категории, если вы не хотите создавать пользовательский файл макета.
Фил Бирни
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.