将新值添加到magento中的属性选项

Ton*_*ony 7 php attributes options magento entity-attribute-value

我正在尝试使用脚本为magento中的属性选项添加新值以加快进程,因为我有超过2,000个制造商

Jon*_*Day 17

这是我用来执行此任务的一段代码.创建一个自定义模块(使用ModuleCreator作为工具),然后mysql4-install-0.1.0.php在sql/modulename_setup文件夹下创建一个.它应该包含以下内容(当然适用于您自己的数据!).

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();

$aManufacturers = array('Sony','Philips','Samsung','LG','Panasonic','Fujitsu','Daewoo','Grundig','Hitachi','JVC','Pioneer','Teac','Bose','Toshiba','Denon','Onkyo','Sharp','Yamaha','Jamo');
$iProductEntityTypeId = Mage::getModel('catalog/product')->getResource()->getTypeId();
$aOption = array();
$aOption['attribute_id'] = $installer->getAttributeId($iProductEntityTypeId, 'manufacturer');

for($iCount=0;$iCount<sizeof($aManufacturers);$iCount++){
   $aOption['value']['option'.$iCount][0] = $aManufacturers[$iCount];
}
$installer->addAttributeOption($aOption);

$installer->endSetup();    
Run Code Online (Sandbox Code Playgroud)

如果需要,可以在Magento wiki上获得更多文档.

如果您不想在自定义模块中执行此操作,则可以创建一个以以下内容开头的php文件:

require_once 'app/Mage.php';
umask(0);
Mage::app('default');
Run Code Online (Sandbox Code Playgroud)

  • @Tony顺便说一句,这个变量被称为`installer`,但这并不意味着它重新安装了整个Magento堆栈.有一个便利类,用于进行安装,升级和更改.这是适合您任务的正确Magento方法. (2认同)

Arv*_*waj 8

Jonathan的回答是正确的.但是如果你想在没有安装程序的情况下执行它,即在任何其他代码中执行它,那么你可能会觉

$arg_attribute = 'manufacturer';
$manufacturers = array('Sony','Philips','Samsung','LG','Panasonic','Fujitsu','Daewoo','Grundig','Hitachi','JVC','Pioneer','Teac','Bose','Toshiba','Denon','Onkyo','Sharp','Yamaha','Jamo');

$attr_model = Mage::getModel('catalog/resource_eav_attribute');
$attr = $attr_model->loadByCode('catalog_product', $arg_attribute);
$attr_id = $attr->getAttributeId();

$option['attribute_id'] = $attr_id;
foreach ($manufacturers as $key=>$manufacturer) {
    $option['value'][$key.'_'.$manufacturer][0] = $manufacturer;
}

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到.


Tof*_*eeq 5

我创建了一个函数来动态添加选项到属性

public function addAttributeOptions($attributeCode, $argValue)
{
    $attribute = Mage::getModel('eav/config')
        ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);


    if ($attribute->usesSource()) {

        $id = $attribute->getSource()->getOptionId($argValue);
        if ($id) 
            return $id;
    }

    $value = array('value' => array(
            'option' => array(
                    ucfirst($argValue),
                    ucfirst($argValue)
                )
        )
    );

    $attribute->setData('option', $value);
    $attribute->save();

    //return newly created option id
    $attribute = Mage::getModel('eav/config')
        ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);
    if ($attribute->usesSource()) {
        return $attribute->getSource()->getOptionId($argValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过提供代码和选项值来向属性添加选项

$this->addAttributeOptions('unfiorm_type', 'leotartd')
Run Code Online (Sandbox Code Playgroud)