Magento2: Domyślnie sortuj według ceny malejąco, a nie rosnąco

11

Ok, więc mam kategorie sortowane według ceny. Magento 2 domyślnie ustawia tę wartość na rosnącą. Ale wolałbym, żeby cena była malejąca.

Jestem całkiem pewien, że mogę to zrobić, dostosowując catalog_category_view.xmlmotyw i argumentując, product_list_toolbarale po prostu nie mogę tego rozgryźć. Jakaś pomoc?

kofeina
źródło
2
użyj tych dwóch linków mage2.pro/t/topic/1095 i mage2.pro/t/topic/1087/2 . pomoże ci
Manashvi Birla,

Odpowiedzi:

24

Skopiuj plik:

vendor / magento / module-catalogue / view / frontend / layout / catalog_category_view.xml

do

app / design / frontend / {{Vender_Namespace}} / {{Theme_Name}} / Magento_Catalog / layout / catalog_category_view.xml

do swojego motywu i dodaj to do pliku:

<?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>

Łącza, które Manashvi wskazują na właściwe lokalizacje w rdzeniu dla plików kontrolujących tę funkcjonalność, ale nie zapewniają rozwiązania. Nigdzie nie znalazłem tego w kodzie podstawowym, więc zgadywałem na podstawie kodu w tym pliku:

vendor / magento / module-catalogue / Block / Product / ProductList / Toolbar.php

i używał składni w innej konfiguracji w innych plikach .xml.

Próbowałem wywołać $block->setDefaultDirection('desc')plik:

vendor / magento / module-catalogue / view / frontend / templates / product / list / toolbar / sorter.phtml

plik, ale to nie działało. Nie wyśledziłem, dlaczego, ale używając xml, aby ustawić domyślnie działało, więc po prostu przeszedłem.

circlesix
źródło
1
Krótkie pytanie @circlesix Twoje rozwiązanie działa świetnie, ale chciałbym zastosować je tylko w kilku kategoriach. Pomyślałem, że będę mógł przejść do sekcji ReferenceContainer w sekcji Custom Layout Update dla każdej kategorii w panelu administracyjnym, ale to nie ma wpływu. Jakieś pomysły?
caffeinehigh
Nie znalazłem jeszcze rozwiązania, opublikuję tutaj, kiedy będę mógł wymyślić lepszy sposób na zrobienie tego.
circlesix
1
@ user1837290, możesz po prostu wprowadzić fragment rozpoczynający się i kończący referenceContainerw polu „Layout Update XML” w panelu administratora określonych kategorii. Tak długo, jak nie zastępujesz globalnego sortowania w swoim motywie, powinno działać. Powiązane: magento.stackexchange.com/q/167048/2415
Scruffy Paws
1
@circlesix, musisz podać atrybut nazwy tylko podczas odwoływania się do bloku
Miguel Felipe Guillen Calo
1
Chciałem tylko skomentować i powiedzieć, że to nadal działa od Magento 2.3, to właśnie rozwiązało problem dla mnie!
Daniel Black
5

Możesz także użyć krótszej wersji. Dla określonych kategorii możesz użyć osobnych plików: katalog_kategorii_widok_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>
RikW
źródło
Rozwiązanie (wykorzystujące tylko blok odniesienia i zawierające treść) można również dodać do niestandardowego kodu XML w kategorii, jeśli nie chcesz tworzyć niestandardowego pliku układu.
Phil Birnie