【问题标题】:How to filter product list by custom attribute on category page of Magento?如何在 Magento 的类别页面上按自定义属性过滤产品列表?
【发布时间】:2014-10-26 20:24:19
【问题描述】:

我在类别页面上制作了 3 个标签,分别是所有产品、在线产品和仅限商店的产品。

所有产品显示该类别下的所有产品。

我用

{{block type="catalog/product_list" template="catalog/product/list.phtml"}} 

完成这项工作。

在线产品将显示自定义属性(product_type)等于“在线产品”

Store Only Products 将显示自定义属性 (product_type) 等于“Store Only Product”

如何创建一个块来显示此类别下的在线产品和仅限商店的产品?

【问题讨论】:

  • 你是问如何显示这个属性,或者如何通过这个属性过滤你的产品列表?
  • 如何通过该属性过滤产品列表

标签: magento magento-1.7


【解决方案1】:

最简单的方法是复制 List 块并添加您需要的过滤器。

您可能还需要修改 Magento 管理区域中的属性以“显示在产品列表中”。

例如:

{{block type="catalog/product_list" template="catalog/product/list.phtml"}}

这将使用 List 块为您过滤集合,让我们制作一个副本:

app/code/core/Mage/Catalog/Block/Product/List.php

app/code/local/Mage/Catalog/Block/Product/Mylist.php

现在让我们修改 Block 以使用我们的自定义属性,这样的东西应该可以工作(未测试)

Mylist.php

class Mage_Catalog_Block_Product_Mylist extends Mage_Catalog_Block_Product_List
{
    /**
     * Retrieve loaded category collection
     *
     * @return Mage_Eav_Model_Entity_Collection_Abstract
     */
    protected function _getProductCollection()
    {
        $collection = parent::_getProductCollection();

        $collection->addAttributeToSelect('my_attribute')
            ->addAttributeToFilter('my_attribute', array('eq' => '000001'))
        ;

        return $collection;
    }
}

现在你可以简单地使用你的新块了:

{{block type="catalog/product_mylist" template="catalog/product/list.phtml"}}

【讨论】:

  • 不知何故不起作用。如果我的自定义属性是product_type,我应该输入$this->_productCollection = $this->_productCollection->addAttributeToSelect('product_type')->addAttributeToFilter('product_type', array('eq' => 'Online Product'));
  • 关于错误,只是不显示。您可以查看kkstores.net/index.php/test-category-1.html
  • 你能改成这样吗:return parent::_getProductCollection();这将排除查找块的任何问题。
  • 请问您使用的是哪个 magento 版本?
  • 嗨安德鲁,我发现即使我复制了 List.php 并且没有做任何更改。当我打电话给{{block type="catalog/product_mylist" template="catalog/product/list.phtml"}} 时,它什么也没有显示。所以我认为这可能是文件地址问题。我们是否需要创建 XML 文件或其他文件来解决此问题?
【解决方案2】:

从不,但从不,创建或修改 Magento CORE 类。答案是实现您的模块,覆盖 List 块类并自定义方法 _getProductCollection。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多