【问题标题】:Magento - set custom sort by and order direction with Layout Updates for just one categoryMagento - 使用布局更新为一个类别设置自定义排序依据和排序方向
【发布时间】:2015-07-02 20:07:36
【问题描述】:

我想做的事情看起来很简单……但由于某种原因我还没有弄清楚。

我想做的是——仅针对一个特定类别——通过 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

【问题讨论】:

  • 试试参考名product_list
  • 没有这样的运气。引用 product_list_toolbarproduct_list 不会更改排序顺序属性或方向。然而,我注意到的是以下布局更新 XML 更改了排序顺序方向但没有更改排序顺序属性:&lt;reference name="product_list_toolbar"&gt;&lt;action method="setDefaultDirection"&gt;&lt;dir&gt;desc&lt;/dir&gt;&lt;/action&gt;&lt;/reference&gt;

标签: xml magento sorting categories magento-1.9


【解决方案1】:

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

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

&lt;CATEGORY_24&gt; 替换为类别 ID。

【讨论】:

  • 这太棒了!我在后端使用代码的第 2-4 行为类别的布局更新 XML 成功切换排序顺序方向,但我使用了不同的方法来添加不同的按属性排序。
【解决方案2】:

经过多次尝试和错误后发现。

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

<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;
}

【讨论】:

    【解决方案3】:

    这对我有用:

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

    【讨论】:

    • 您能解释一下为什么它对您有用以及为什么可以解决这个问题吗? SO中不接受只有代码的答案
    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多