我为关联产品创建了一个自定义列(基本上每个简单产品都会在"相关产品和#34;可配置产品标签下)具有该列。我将此字段/列的信息存储到属于可配置产品的属性中,而不是每个简单产品。
以下是添加列的代码;
config.xml中
<core_block_abstract_to_html_before>
<observers>
<something>
<class>namespace_JsonProductInfo_Model_Observer</class>
<method>addPositionColumn</method>
</something>
</observers>
</core_block_abstract_to_html_before>
Oberver.php
public function addPositionColumn(Varien_Event_Observer $observer)
{
$block = $observer->getEvent()->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Super_Config_Grid) {
if (!$block->isReadonly()) {
$block->addColumnAfter(
'position_simple',
array(
'header' => Mage::helper('jsonproductinfo')->__('Position'),
'type' => 'input',
'name' => 'position_simple',
'index' => 'position_simple',
'sortable' => false,
),
'name'
);
}
}
}
使用上面的代码,我可以将列添加到require网格中。而且我也能够保存我放在该列中的信息(基本上是一个属性)。我面临的唯一问题是,我无法再次将存储的信息显示到该列中(如果我编辑产品)。我还创建了另一个 eav_collection_abstract_load_befor 类型的观察者,但到目前为止还没有运气。 以下是代码:
config.xml中
<eav_collection_abstract_load_before>
<observers>
<jsonproductinfo>
<class>namespace_JsonProductInfo_Model_Observer</class>
<method>addPositionToCatalogProductCollection</method>
</jsonproductinfo>
</observers>
</eav_collection_abstract_load_before>
Observer.php
public function addPositionToCatalogProductCollection($observer)
{
$collection = $observer->getEvent()->getCollection();
if (!isset($collection)) {
return;
}
$collection->addAttributeToSelect('position_simple');
}
如果有人可以指出错误或指导我如何将该信息再次显示在该列中,我将不胜感激。
编辑以下是创建&#34; position_simple&#34;的代码。属性。
$this->addAttribute(
'catalog_product',
'position_simple',
array(
'group' => 'General',
'type' => 'varchar',
'input' => 'hidden',
'backend' => '',
'frontend' => '',
'label' => 'Simple Position',
'class' => '',
'source' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'visible' => true,
'required' => false,
'user_defined' => true,
'default' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'visible_in_advanced_search' => false,
'unique' => false,
'apply_to' => Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE,
'is_configurable' => false,
)
);
答案 0 :(得分:0)
'index' => 'position_simple'
更改为'index' => 'entity_id'
position_simple
属性的值,并在添加的列中使用它 - 一种方法:在 Observer.php
中创建功能protected function _getDefaultConfigurationId() {
/** @var Mage_Catalog_Model_Product $product */
$product = Mage::registry('current_product');
if ($product) {
return array($product->getData('position_simple'));
}
return '';
}
并在你的addPositionColumn函数中使用它:
...
'values' => $this->_getDefaultConfigurationId(),
...
之后,根本不需要观察者类型 eav_collection_abstract_load_befor 。