2015-12-06 42 views
2

我已經爲關聯產品創建了自定義列(基本上,每個簡單產品都會在可配置產品的「關聯產品」選項卡下具有該列)。我將該字段/列的信息存儲到屬於可配置產品的屬性中,而不是每個簡單產品。在admin中將自定義列添加到可配置產品網格

下面是添加列的代碼;

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

有了上面的代碼,我能夠將列添加到需要電網。而且我也能夠保存我放入該列的信息(這基本上是一個屬性)。我面臨的唯一問題是,我無法再次將存儲的信息顯示到該列(如果我編輯產品)。我還創建了另一個類型爲的觀察者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'); 
    } 

我將不勝感激,如果有人可以指向錯誤或引導我我怎樣才能將這些信息再次顯示回該列。

編輯這裏是它創建了「position_simple」屬性的代碼。

$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
  1. 變化'index' => 'position_simple''index' => 'entity_id'Observer.php(功能addPositionColumn)
  2. 你需要從配置的產品讓您的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可言。

相關問題