Magento2: Padrão para classificar por preço descendente e não ascendente


11

Ok, então eu tenho minhas categorias classificando por preço. O Magento 2 padroniza isso para o preço ascendente. Mas eu preferiria que fosse por preço descendente.

Tenho certeza de que posso fazer isso personalizando catalog_category_view.xmlmeu tema e argumentando, product_list_toolbarmas não consigo entender direito. Qualquer ajuda?


2
use esses dois links mage2.pro/t/topic/1095 e mage2.pro/t/topic/1087/2 . ele vai ajudar você
Manashvi Birla

Respostas:


24

Copie o arquivo:

fornecedor / magento / catalog-module / view / frontend / layout / catalog_category_view.xml

para

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

no seu tema e adicione isso ao arquivo:

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

Os links que Manashvi apontam para os locais certos no núcleo para os arquivos que controlam essa funcionalidade, mas eles não fornecem uma solução. Não encontrei isso em nenhum lugar do código principal, então adivinhei com base no código deste arquivo:

fornecedor / magento / catálogo de módulos / bloco / produto / lista de produtos / Toolbar.php

e usou a sintaxe em outra configuração em outros arquivos .xml.

Eu tentei chamar $block->setDefaultDirection('desc')o arquivo:

fornecedor / magento / catálogo de módulos / view / frontend / templates / product / list / toolbar / sorter.phtml

arquivo, mas isso não funcionou. Eu não rastreei o porquê, mas usando o xml para definir o padrão funcionou, então apenas segui em frente.


1
Apenas uma pergunta rápida @circlesix, sua solução funciona muito bem, mas eu gostaria de aplicá-la a apenas algumas categorias. Eu pensei que seria capaz de cair na seção referenceContainer na seção Custom Layout Update para cada categoria no painel de administração, mas isso não afeta. Alguma ideia?
caffeinehigh

Ainda não descobri uma solução, vou postar aqui quando puder encontrar uma maneira melhor de fazer isso.
circlesix

1
@ user1837290, você pode colocar o pedaço inicial e final referenceContainerno campo "XML de atualização de layout" no administrador de suas categorias específicas. Contanto que você não esteja substituindo a classificação global no seu tema, ela deve funcionar. Veja também: magento.stackexchange.com/q/167048/2415
Scruffy Paws

1
@circlesix você só precisará fornecer atributo de nome ao fazer referência a um bloco
Miguel Felipe Guillen Calo

1
Só queria comentar e dizer que isso ainda funciona a partir do Magento 2.3, apenas resolveu o problema para mim!
Daniel Black

5

Você também pode usar a versão mais curta. Para categorias específicas, você pode usar arquivos separados: 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>

A solução (usando apenas o bloco de referência e o conteúdo) também pode ser adicionada ao XML personalizado na categoria, se você não desejar criar um arquivo de layout personalizado.
quer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.