我创建了一个非常大的导入脚本,它将产品从CSV导入到magento。我还有一个要解决的问题。
我使用属性下拉列表。不幸的是,我无法为单个产品设置这些属性的值。 我做了什么:
我尝试了一些方法,这里的one对我来说很好看:
private function setOrAddOptionAttribute($product, $arg_attribute, $arg_value) {
$attribute_model = Mage::getModel('eav/entity_attribute');
$attribute_options_model = Mage::getModel('eav/entity_attribute_source_table');
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute = $attribute_model->load($attribute_code);
$attribute_options_model->setAttribute($attribute);
$options = $attribute_options_model->getAllOptions(false);
// determine if this option exists
$value_exists = false;
foreach($options as $option) {
if ($option['label'] == $arg_value) {
$value_exists = true;
break;
}
}
// if this option does not exist, add it.
if (!$value_exists) {
$attribute->setData('option', array(
'value' => array(
'option' => array($arg_value,$arg_value)
)
));
$attribute->save();
}
$product->setData($arg_attribute, $arg_value);
$product->save();
}
不幸的是它不起作用。有任何想法吗?我正在使用Magento 1.7.0.2
答案 0 :(得分:12)
你可以这样做:
$attr_id = $this->attributeValueExists('manufacturer', 'Samsung');
$product->setData('manufacturer', $attr_id );
$product->save();
public function attributeValueExists($arg_attribute, $arg_value)
{
$attribute_model = Mage::getModel('eav/entity_attribute');
$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute = $attribute_model->load($attribute_code);
$attribute_table = $attribute_options_model->setAttribute($attribute);
$options = $attribute_options_model->getAllOptions(false);
foreach($options as $option)
{
if ($option['label'] == $arg_value)
{
return $option['value'];
}
}
return false;
}
如果您有任何问题,请与我们联系。
亲切。
答案 1 :(得分:6)
我重写了初始函数,因此它适用于文本和选择字段:
public function setOrAddOptionAttribute($product, $arg_attribute, $arg_value) {
$attribute_model = Mage::getModel('eav/entity_attribute');
$attribute_options_model = Mage::getModel('eav/entity_attribute_source_table');
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute = $attribute_model->load($attribute_code);
$attributeType = $attribute->getFrontendInput();
if ($attributeType == 'select') {
$attribute_options_model->setAttribute($attribute);
$options = $attribute_options_model->getAllOptions(false);
// determine if this option exists
$value_exists = false;
foreach ($options as $option) {
if ($option['label'] == $arg_value) {
$value_exists = true;
break;
}
}
// if this option does not exist, add it.
if (!$value_exists) {
$attribute->setData('option', array(
'value' => array(
'option' => array($arg_value, $arg_value)
)
));
$attribute->save();
// Now get the option value for this newly created attribute value
$_product = Mage::getModel('catalog/product');
$attr = $_product->getResource()->getAttribute($arg_attribute);
if ($attr->usesSource()) {
$option['value'] = $attr->getSource()->getOptionId($arg_value);
}
}
$product->setData($arg_attribute, $option['value']);
} else {
$product->setData($arg_attribute, $arg_value);
}
}