Magento - 通过布局更新为一个类别设置自定义排序依据和订购方向

时间:2015-07-02 20:07:36

标签: xml magento sorting categories magento-1.9

我想做的事情似乎很简单......但我还是因为某种原因无法解决这个问题。

我想做的是 - 仅针对一个特定类别 - 通过Magento后端更改按属性和排序顺序排序。也就是说,我认为最好的办法是使用自定义布局更新XML。在互联网上广泛搜索之后,我无法为我的生活找到答案(我希望这方面的答案对他人也有帮助)。

很简单,我为一个特定类别尝试了以下自定义布局更新XML:

<reference name="product_list_toolbar">
    <action method="setDefaultOrder"><string>created_at</string></action>
    <action method="setDefaultDirection"><string>desc</string></action>
</reference>

它只是不起作用! (它在我的自定义主题和默认的RWD主题中都没有做任何事。)

我想做什么不可能?看起来很容易!

提前致谢。

注意:我使用的是Magento 1.9.1.1版本

3 个答案:

答案 0 :(得分:2)

出于某种原因,自定义布局方法在Magento 1.9及更高版本中不起作用。这可能是因为Magento用<catalog_category_default>中的local.xml标签覆盖了它。我找到的唯一解决方案是打开你的主题local.xml,并插入以下内容;

<CATEGORY_24>
     <reference name="product_list_toolbar">
        <action method="setDefaultDirection"><string>desc</string></action>
    </reference>
</CATEGORY_24>

其中<CATEGORY_24>被类别ID替换。

答案 1 :(得分:2)

经过大量的反复试验后发现了这一点。

更改排序顺序,我使用了Ricky的代码,并使用Magento后端将其添加为该类别的布局更新XML:
(类别&gt;自定义设计&gt;自定义布局更新)

<reference name="product_list_toolbar">
    <action method="setDefaultDirection"><string>desc</string></action>
</reference>

按项目添加排序,它需要扩展Mage_Catalog_Model_Config类,如下所示:
(特别是重写函数getAttributeUsedForSortByArray()

public function getAttributeUsedForSortByArray()
{
    $options = array(
        'position'  => Mage::helper('catalog')->__('Position'), // ADD TRAILING COMMA
        // ADD ADDITIONAL ATTRIBUTES BELOW
        'created_at'  => Mage::helper('catalog')->__('Date')
    );
    foreach ($this->getAttributesUsedForSortBy() as $attribute) {
        /* @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract */
        $options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
    }

    return $options;
}

答案 2 :(得分:1)

这对我有用:

<reference name="product_list">
    <action method="setDefaultDirection"><string>desc</string></action>
    <action method="setSortBy"><string>sku</string></action>
</reference>
<reference name="product_list_toolbar">
    <action method="setDefaultDirection"><string>desc</string></action>
    <action method="setSortBy"><string>sku</string></action>
    <action method="setDefaultGridPerPage"><limit>260</limit></action>
    <action method="setDefaultListPerPage"><limit>260</limit></action>
</reference>