Magento2: Predeterminado para ordenar por precio descendente no ascendente

11

Ok, entonces tengo mis categorías ordenadas por precio. Magento 2 predetermina esto a precio ascendente. Pero preferiría que fuera por precio descendente.

Estoy bastante seguro de que puedo hacerlo personalizando catalog_category_view.xmlmi tema y discutiendo, product_list_toolbarpero no puedo entenderlo. ¿Alguna ayuda?

cafeína alta
fuente
2
use estos dos enlaces mage2.pro/t/topic/1095 y mage2.pro/t/topic/1087/2 . te ayudará
Manashvi Birla

Respuestas:

24

Copia el archivo:

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

a

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

en su tema y agregue esto al archivo:

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

Los enlaces que Manashvi apuntan a las ubicaciones correctas en el núcleo para los archivos que controlan esta funcionalidad, pero no proporcionan una solución. No encontré esto en ninguna parte del código central, así que solo hice una suposición basada en el código de este archivo:

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

y usó la sintaxis en otra configuración en otros archivos .xml.

Intenté llamar $block->setDefaultDirection('desc')en el archivo:

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

archivo pero esto no funcionó. No he rastreado por qué, pero usar el xml para establecer el valor predeterminado funcionó, así que seguí adelante.

Círculosix
fuente
1
Solo una pregunta rápida @circlesix su solución funciona muy bien, pero me gustaría aplicarla solo a un par de categorías. Pensé que podría colocar la sección de referencia de Contenedor en la sección Actualización de diseño personalizado para cada categoría dentro del panel de administración, pero esto no tiene ningún efecto. ¿Algunas ideas?
cafeína
Todavía no he encontrado una solución, publicaré aquí cuando pueda encontrar una mejor manera de hacerlo.
circlesix
1
@ user1837290, puede poner el fragmento comenzando y terminando referenceContaineren el campo "Layout Update XML" en el administrador de sus categorías específicas. Siempre que no anule la ordenación global de su tema, debería funcionar. Relacionado: magento.stackexchange.com/q/167048/2415
Scruffy Paws el
1
@circlesix solo necesita proporcionar un atributo de nombre al hacer referencia a un bloque
Miguel Felipe Guillen Calo
1
Solo quería comentar y decir que esto todavía funciona a partir de Magento 2.3, ¡solo resolvió el problema para mí!
Daniel Black
5

Puedes usar la versión más corta también. Para categorías específicas, puede usar archivos 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>
RikW
fuente
La solución de (usando solo el bloque de referencia y conteniendo contenido) también se puede agregar a XML personalizado en la categoría si no desea crear un archivo de diseño personalizado.
Phil Birnie