Skip to content

Issue 31043: Elastic Search interferes with the default sort order of products (changing newest first to oldest first) #36900

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: 2.4-develop
Choose a base branch
from
28 changes: 28 additions & 0 deletions app/code/Magento/Catalog/Model/Config/Source/SortOrder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/
declare(strict_types=1);

/**
* Catalog Product List Sort Order
*
*/
namespace Magento\Catalog\Model\Config\Source;

class SortOrder implements \Magento\Framework\Data\OptionSourceInterface
{
/**
* Retrieve option values array
*
* @return array
*/
public function toOptionArray(): array
{
return [
['value' => 'ASC', 'label' => __('Ascending')],
['value' => 'DESC', 'label' => __('Descending')],
Comment on lines +24 to +25
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my opinion constant usage Select::SQL_ASC or Collection::SORT_ORDER_ASC is more preferable

];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@
<data key="path">catalog/frontend/list_allow_all</data>
<data key="value">1</data>
</entity>
<entity name="CustomStoreFrontProductsSortByOrder">
<data key="path">catalog/frontend/default_sort_by_order</data>
<data key="value">DESC</data>
</entity>
<entity name="DefaultListMode">
<data key="path">catalog/frontend/list_mode</data>
<data key="value">grid-list</data>
Expand All @@ -125,4 +129,8 @@
<data key="path">catalog/frontend/list_allow_all</data>
<data key="value">0</data>
</entity>
</entities>
<entity name="DefaultStoreFrontProductsSortByOrder">
<data key="path">catalog/frontend/default_sort_by_order</data>
<data key="value">ASC</data>
</entity>
</entities>
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
</createData>
<magentoCLI command="config:set {{CustomGridPerPageValuesConfigData.path}} {{CustomGridPerPageValuesConfigData.value}}" stepKey="setCustomGridPerPageValues"/>
<magentoCLI command="config:set {{CustomGridPerPageDefaultConfigData.path}} {{CustomGridPerPageDefaultConfigData.value}}" stepKey="setCustomGridPerPageDefaults"/>
<magentoCLI command="config:set {{DefaultStoreFrontProductsSortByOrder.path}} {{DefaultStoreFrontProductsSortByOrder.value}}" stepKey="setDefaultSortByOrderValue"/>
</before>
<after>
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* Copyright 2020 Adobe
* All Rights Reserved.
*/
-->
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
<test name="StorefrontProductSortByPositionInDescOrderTest">
<annotations>
<stories value="Sort Products having same position on Storefront In Desc Order"/>
<title value="Sort products with the same position in descending order appropriately"/>
<description value="Use store configuration to sort products of same position in desc order"/>
<severity value="MAJOR"/>
<testCaseId value="AC-14411"/>
<group value="Catalog"/>
</annotations>
<before>
<createData entity="_defaultCategory" stepKey="createCategory"/>
<createData entity="productAlphabeticalA" stepKey="product1">
<requiredEntity createDataKey="createCategory"/>
</createData>
<createData entity="productAlphabeticalB" stepKey="product2">
<requiredEntity createDataKey="createCategory"/>
</createData>
<magentoCLI command="config:set {{CustomStoreFrontProductsSortByOrder.path}} {{CustomStoreFrontProductsSortByOrder.value}}" stepKey="setCustomSortByOrderValue"/>
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindex">
<argument name="indices" value=""/>
</actionGroup>
</before>
<after>
<deleteData stepKey="deleteProduct1" createDataKey="product1"/>
<deleteData stepKey="deleteProduct2" createDataKey="product2"/>
<deleteData stepKey="deleteCategory" createDataKey="createCategory"/>
<magentoCLI command="config:set {{DefaultStoreFrontProductsSortByOrder.path}} {{DefaultStoreFrontProductsSortByOrder.value}}" stepKey="setDefaultSortByOrderValue"/>
</after>

<actionGroup ref="StorefrontNavigateToCategoryUrlActionGroup" stepKey="NavigateToCategoryPageOnStoreFront">
<argument name="categoryUrl" value="$$createCategory.custom_attributes[url_key]$$"/>
</actionGroup>
<actionGroup ref="StorefrontQuickSearchCheckProductNameInGridActionGroup" stepKey="assertProduct1Position">
<argument name="productName" value="$product1.name$"/>
<argument name="index" value="2"/>
</actionGroup>
<actionGroup ref="StorefrontQuickSearchCheckProductNameInGridActionGroup" stepKey="assertProduct2Position">
<argument name="productName" value="$product2.name$"/>
<argument name="index" value="1"/>
</actionGroup>
</test>
</tests>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
</annotations>
<before>
<!-- Step1: Login as Admin -->
<magentoCLI command="config:set {{DefaultStoreFrontProductsSortByOrder.path}} {{DefaultStoreFrontProductsSortByOrder.value}}" stepKey="setDefaultSortByOrderValue"/>
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
</before>
<after>
Expand Down
5 changes: 5 additions & 0 deletions app/code/Magento/Catalog/etc/adminhtml/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@
<comment>Applies to category pages.</comment>
<source_model>Magento\Catalog\Model\Config\Source\ListSort</source_model>
</field>
<field id="default_sort_by_order" translate="label comment" type="select" sortOrder="6" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Product Listing Sort by Order</label>
<comment>Applies to category pages.</comment>
<source_model>Magento\Catalog\Model\Config\Source\SortOrder</source_model>
</field>
<field id="list_allow_all" translate="label comment" type="select" sortOrder="6" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Allow All Products per Page</label>
<comment>Whether to show "All" option in the "Show X Per Page" dropdown.</comment>
Expand Down
1 change: 1 addition & 0 deletions app/code/Magento/Catalog/etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<flat_catalog_category>0</flat_catalog_category>
<flat_catalog_product>0</flat_catalog_product>
<default_sort_by>position</default_sort_by>
<default_sort_by_order>ASC</default_sort_by_order>
<list_allow_all>0</list_allow_all>
<parse_url_directives>1</parse_url_directives>
<remember_pagination>0</remember_pagination>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,12 @@ protected function _beforeLoad()
* for the same requests and products with the same relevance
* NOTE: this does not replace existing orders but ADDs one more
*/
$this->setOrder('entity_id', Select::SQL_ASC);
$defaultSortOrder = $this->_scopeConfig->getValue(
'catalog/frontend/default_sort_by_order',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
);
$sortOrder = ($defaultSortOrder == self::SORT_ORDER_ASC) ? Select::SQL_ASC : Select::SQL_DESC;
$this->setOrder('entity_id', $sortOrder);
return parent::_beforeLoad();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
<argument name="value" value="{{_defaultProduct.name}}"/>
</actionGroup>
<actionGroup ref="SaveProductFormActionGroup" stepKey="saveProduct2b"/>
<magentoCLI command="config:set {{DefaultStoreFrontProductsSortByOrder.path}} {{DefaultStoreFrontProductsSortByOrder.value}}" stepKey="setDefaultSortByOrderValue"/>
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindex">
<argument name="indices" value=""/>
</actionGroup>
Expand Down