在admin中将自定义列添加到可配置的产品网格中

时间:2015-12-06 19:23:52

标签: magento magento-1.9 configurable-product

我为关联产品创建了一个自定义列(基本上每个简单产品都会在"相关产品和#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,
    )
);

1 个答案:

答案 0 :(得分:0)

  1. Observer.php (函数addPositionColumn)中将'index' => 'position_simple'更改为'index' => 'entity_id'
  2. 您需要从可配置产品中获取position_simple属性的值,并在添加的列中使用它 - 一种方法:
  3. 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