2017-01-10 64 views
0

我已成功将数据从产品属性值选项自定义字段写入自定义表。以下是我做的事:Magento属性值自定义字段:admin和前端读取

应用程序/代码/本地/ MyModule的/控制的/ etc/config.xml中

<events> 
    <catalog_entity_attribute_save_before> 
     <observers> 
      <control_catalog_product_attribute_save_before> 
       <type>singleton</type> 
       <class>control/catalog_product_observer</class> 
       <method>saveAttributeValueDescription</method> 
      </control_catalog_product_attribute_save_before> 
     </observers> 
    </catalog_entity_attribute_save_before> 
<events> 

<entities> 
    <productattributesvalues> 
     <table>mymodule_product_attributes_values_description</table> 
    </productattributesvalues> 
</entities> 

应用程序/代码/本地/ MyModule的/控制/型号/目录/产品/ Observer.php

public function saveAttributeValueDescription($observer) 
{ 
    $attribute = $observer->getEvent()->getAttribute(); 
    $attribute_id = $attribute->getAttributeId(); 
    $option = $attribute->getOption(); 
    $description = $option["description"]; 
    $valueDescriptionModel = Mage::getModel('control/productattributesvalues'); 
    $deleteCollection = $valueDescriptionModel->getCollection()->addFieldToFilter('attribute_id', array('eq' => $attribute_id)); 
    foreach($deleteCollection as $coll) 
     $valueDescriptionModel->load($coll->getDescriptionId())->delete(); 
    $valueDescriptionModel->unsetData(); 
    foreach ($description as $option_id => $option_description) { 
     if ("" !== $option_description) { 
      $valueDescriptionModel 
       ->setAttributeId($attribute_id) 
       ->setOptionId($option_id) 
       ->setDescription($option_description) 
       ->save() 
       ->unsetData(); 
     } 
    } 
    return $this; 
} 

应用程序/代码/本地/ MyModule的/控制/型号/ Mysql4/Productattributesvalues.php

class MyModule_Control_Model_Mysql4_Productattributesvalues extends Mage_Core_Model_Mysql4_Abstract 
{ 
    public function _construct() 
    { 
     $this->_init('control/productattributesvalues', 'description_id'); 
    } 
} 

应用程序/代码/本地/ MyModule的/控制/型号/ Mysql4/Productattributesvalues/Collection.php

class MyModule_Control_Model_Mysql4_Productattributesvalues_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract 
{ 
    public function _construct() 
    { 
     parent::_construct(); 
     $this->_init('control/productattributesvalues'); 
    } 
} 

定制表

CREATE TABLE IF NOT EXISTS `mymodule_product_attributes_values_description` (
    `description_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `attribute_id` int(11) unsigned NOT NULL, 
    `option_id` int(11) unsigned NOT NULL, 
    `description` text NOT NULL, 
    PRIMARY KEY (`description_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

目录/产品/ attribute/options.phtml

// line 88 added: 
<th><?php echo Mage::helper('catalog')->__('Description') ?></th> 
// line 101: 
<td class="a-left"><input class="input-text" type="text" name="option[description][{{id}}]" value="{{description}}" /></td> 
// line 126: 
'<td><input class="input-text" type="text" name="option[description][{{id}}]" value="{{description}}" /><\/td>'+ 

现在我不知道如何来读取数据目录/产品/属性/ options.phtml和前端产品视图页面...

我务必做好观察者的路线呢?如果是这样,该怎么做?任何人都可以指向正确的方向吗?

谢谢!

回答

0

Got it! :)

应用程序/代码/本地/ MyModule的/控制/型号/ Productattributesvalues.php

public function getAttributeValueDescription($attributeId, $optionId) 
{ 
    $descriptionCollection = $this->getCollection() 
    ->addFieldToFilter('attribute_id', array('eq' => $attributeId)) 
    ->addFieldToFilter('option_id', array('eq' => $optionId)); 

    $descriptionArray = $descriptionCollection->getData(); 

    if (isset($descriptionArray[0]["description"])) 
    return $descriptionArray[0]["description"]; 
    else 
    return; 
} 

目录/产品/属性/ options.phtml

// line 90 added: 
<?php $optionValues = $this->getOptionValues() ?> 

<?php foreach ($optionValues as &$val): ?> 
    <?php $val->_data["description"] = Mage::getModel('control/productattributesvalues')->getAttributeValueDescription($this->getRequest()->getParam('attribute_id'), $val->id) ?> 
<?php endforeach ?> 
// replaced all $this->getOptionValues() for $optionValues