如何添加一个属性以选择产品清单中的自定义属性
题
我有一个自定义属性添加到我的目录中。它是一个选择框
在列出目录时,我想显示该属性过滤它。
在我的 mage/adminhtml/block/catalog/product/grid.php
我有 _preparecollection
功能
我正在尝试将我的额外过滤器添加到 _preparecolletion
从我的自定义模块。
怎么做
protected function _prepareCollection()
{
$store = $this->_getStore();
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('sku')
->addAttributeToSelect('name')
->addAttributeToSelect('attribute_set_id')
->addAttributeToSelect('type_id')
->addFieldToFilter('my_custom_field');// i want to add this filter from my custom module
// so that i don't need to touch my core files.
可能吗?
解决方案
在app/code/local/company/module/etc中,在您的config.xml中输入此信息
<config>
<global>
<blocks>
<adminhtml>
<rewrite>
<catalog_product_grid>Company_Module_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
在App/code/local/company/module/block/adminhtml/catalog/product/grid.php中
class Company_Module_Block_Adminhtml_Catalog_Product_Grid extends Mage_Adminhtml_Block_Catalog_Product_Grid
{
protected function _prepareCollection()
{
parent::_prepareCollection();
$this->getCollection()->addFieldToFilter('field', 'value');
return $this;
}
}
其他提示
我假设您想在产品网格中添加一个新的可过滤列,从您的问题中不清楚。就像我说的那样,在这种情况下,重写不是必需的,但是由于您想使用重写,因此您可以做到这一点。
首先,将产品网格重写在您的模块中。假设您的模块称为Company_Module。在下面 app/code/local/Company/Module/etc
, ,在您的 config.xml
<config>
<global>
<blocks>
<adminhtml>
<rewrite>
<catalog_product_grid>Company_Module_Block_Adminhtml_Catalog_Product_Grid</catalog_product_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
这告诉Magento您想重写网格块。在此示例中,我将使用Magento示例数据1.6+-属性 color
, ,使用类似于您的选项。您需要覆盖2种方法, _prepareCollection
和 _prepareColumns
.
在 app/code/local/Company/Module/Block/Adminhtml/Catalog/Product/Grid.php
class Company_Module_Block_Adminhtml_Catalog_Product_Grid extends Mage_Adminhtml_Block_Catalog_Product_Grid
{
protected function _prepareCollection()
{
parent::_prepareCollection();
$this->getCollection()->addAttributeToSelect('color');
return $this;
}
protected function _prepareColumns()
{
$options = Mage::getSingleton('eav/config')
->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'color')
->getSource()
->getAllOptions(false, true);
$optionsArray = array();
foreach ($options as $option) {
$optionsArray[$option['value']] = $option['label'];
}
$this->addColumnAfter('color', array(
'header' => Mage::helper('catalog')->__('Color'),
'width' => '100px',
'type' => 'options',
'options' => $optionsArray,
'index' => 'color',
), 'status');
parent::_prepareColumns();
return $this;
}
}
通过这样做,您将获得一个可过滤的额外列。希望我能正确解决您的问题。
我已经使用事件观察者已经在模块中做了类似的事情。那时我做了一些研究,我找不到一个“更好的”解决方案。这是模块,以防您要查看它: https://github.com/mzentrale/mzentrale_productthumb
基本上,我定义了一个adminhtml观察者,该观察者倾听 catalog_product_collection_load_before
, ,并且它仅为给定的手柄加载属性(adminhtml_catalog_product_index
和 adminhtml_catalog_product_grid
)。然后,我使用布局XML添加了额外的列。