如果我想按名称升序对结果列表进行排序,Magento 会记住此偏好并按名称升序对所有未来的“搜索”和“根类别”进行排序,即使这不适合搜索……您总是希望相关性成为默认。
这是如何改变的,所以 Magento 忘记了排序首选项?
如果我想按名称升序对结果列表进行排序,Magento 会记住此偏好并按名称升序对所有未来的“搜索”和“根类别”进行排序,即使这不适合搜索……您总是希望相关性成为默认。
这是如何改变的,所以 Magento 忘记了排序首选项?
Magento 在目录会话中存储类别排序数据,页码除外。GET
应用类别排序时会使用此会话数据和 URL参数,GET
如果存在参数,则首选参数(然后更新记录的会话数据)。从会话中提取排序数据,如下所示:
Mage::getSingleton('catalog/session')->getSortOrder();
Mage::getSingleton('catalog/session')->getSortDirection();
Mage::getSingleton('catalog/session')->getDisplayMode();
Mage::getSingleton('catalog/session')->getLimitPage();
您还可以使用以下命令取消设置此会话数据:
Mage::getSingleton('catalog/session')->unsSortOrder();
Mage::getSingleton('catalog/session')->unsSortDirection();
Mage::getSingleton('catalog/session')->unsDisplayMode();
Mage::getSingleton('catalog/session')->unsLimitPage();
如果您在代码库中搜索这些命令,它会很快找到Mage_Catalog_Block_Product_List_Toolbar
包含方法的工具栏类:
getCurrentOrder()
getCurrentDirection()
getCurrentMode()
getLimit()
每个方法首先通过查看请求参数(soGET
参数)来提取相关的排序数据,如果失败,它会查看会话,如果没有会话数据,则最后回退到默认排序设置。另请注意,$this->_memorizeParam(...);
如果GET
找到的参数不是该参数的默认排序,则会调用。
为了对核心功能的影响最小化,我建议您最好的方法是重写上述方法,并在新方法中调用上述相关会话方法以取消设置该参数的会话数据,并通过调用完成带有 的父方法parent::
。这样就永远不会找到会话数据,并且只会使用 URL 参数或默认排序。config.xml
在您的模块文件中,示例重写将是这样的:
<?xml version="1.0"?>
<config>
<modules>
<Namespace_ModuleName>
<version>0.1.0</version>
</Namespace_ModuleName>
</modules>
....
<global>
...
<blocks>
<catalog>
<rewrite>
<product_list_toolbar>Namespace_ModuleName_Block_Product_List_Toolbar</product_list_toolbar>
</rewrite>
</catalog>
</blocks>
</global>
</config>
还有你重写的课程:
<?php
class Namespace_ModuleName_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar
{
public function getCurrentOrder()
{
Mage::getSingleton('catalog/session')->unsSortOrder();
parent::getCurrentOrder();
}
public function getCurrentDirection()
{
Mage::getSingleton('catalog/session')->unsSortDirection();
parent::getCurrentDirection();
}
public function getCurrentMode()
{
Mage::getSingleton('catalog/session')->unsDisplayMode();
parent::getCurrentMode();
}
public function getLimit()
{
Mage::getSingleton('catalog/session')->unsLimitPage();
parent::getLimit();
}
}