[英]Magento 1.9.X programmatically save custom attribute
我做了一個簡單的導入腳本,我試圖以編程方式保存3個自定義屬性(att1,att2,att3)以及所有其他信息(名稱,描述,價格,類別..)。
所以基本上我有:
public function insert_product($data) {
$product = Mage::getModel('catalog/product');
try {
$sku = $data['code'];
if ($this->prodottiImportati[$sku]) {
$sku = $data['code'] . '-1';
}
$this->prodottiImportati[$sku] = true;
$product->setSku($sku);
$product->setName($data['name']);
$product->setDescription($data['desc']);
$product->setShortDescription($data['short_desc']);
$product->setManufacturer('');
$product->setPrice($data['price']);
$product->setTypeId('simple');
$product->setAttributeSetId($this->attributeSet);
$categorie = $this->get_categories($data);
$product->setCategoryIds($categorie);
$product->setWeight($data['peso']);
$product->setTaxClassId(2); // taxable goods
$product->setVisibility(4); // catalog, search
$product->setStatus(1); // enabled
$product->setWebsiteIds($data['store_id']);
$stockData = $product->getStockData();
$stockData['qty'] = $data['qty'];
if ($data['quantita'] > 0) {
$stockData['is_in_stock'] = 1;
} else {
$stockData['is_in_stock'] = 0;
}
$stockData['manage_stock'] = 1;
$stockData['use_config_manage_stock'] = 0;
$product->setStockData($stockData);
$product->setIsMassupdate(true)->setExcludeUrlRewrite(true);
$product->save();
$productID = $product->getId();
} catch(Exception $e) {
echo ($e->getMessage());
}
return $productID;
}
我嘗試的第一件事是添加一個
$productID = $this->insert_product($data);
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($productID), array(
'att1' => $data['att1'],
), $data['store_id']);
因此,基本上是使用插入后獲得的ID在調用插入函數后更新事物。 store_id是該給定語言的商店ID。 沒有保存任何東西。
第二次嘗試,我遵循了這一點: Magento以編程方式導入產品來添加自定義選項 ,我嘗試在insert_product函數內以及$ productID = $ this-> insert_product($ data)之后進行添加; 兩者都不起作用。
最后我嘗試了一個神奇的$ product-> setAtt1('value'); 在insert_product函數中,不確定Magento如何理解以這種方式設置att1,但是...您知道,我在某處閱讀了該書,然后嘗試了;)
att1,att2和att3拼寫為小寫,盡管它們有一個大寫標簽(認為這里無關緊要),它們是屬性組的一部分(我通過$ product-> setAttributeSetId($ this-> setAttributi )),並且它們都是多個選擇屬性,因此我可以在teory中將多個值傳遞給它們。
我確定我在途中丟失了一些東西。 有人可以幫忙嗎?
自從我在這里寫了十分鍾之后,我找到了方法。 我花了我永遠解決。
提示是您必須添加屬性ID,而不是值。 至少對於我來說,具有多個選擇屬性會發生這種情況,不確定是否一直都是如此。
這是我的做法:
在函數insert_product中,我添加了:
$optionId = $this->get_option_id_by_code('att1', 'Value of the attribute you need to add');
$product->setAtt1($optionId);
因此,如果您的yor屬性被命名,那么說“品牌”,它將是:
$optionId = $this->get_option_id_by_code('brand', 'Nike');
$product->setBrand($optionId);
如果您的屬性可以有多個值,則需要將上面的代碼更改為:
$optionId = array();
foreach ($myAttributesArray as $someValues) {
$optionId[] = $this->get_option_id_by_code('att1', $someValues);
}
$product->setAtt1($optionId);
foreach只是一個示例,您需要遍歷多個值並獲取各自的ID,並將它們全部與setAtt1一起添加,並將它們作為數組傳遞。 我正在開發一個改進的版本,其中get_option_id_by_code函數以一種更有效的方式一次完成所有操作。 這是一個可行的“基本”版本,請隨時使其變得花哨和聰明。
然后,我創建了另一個名為get_option_id_by_code的函數,如下所示:
protected function get_option_id_by_code($attrCode, $optionLabel) {
$attrModel = Mage::getModel('eav/entity_attribute');
$attrID = $attrModel->getIdByCode('catalog_product', $attrCode);
$attribute = $attrModel->load($attrID);
$options = Mage::getModel('eav/entity_attribute_source_table')
->setAttribute($attribute)
->getAllOptions(false);
foreach ($options as $option) {
if ($option['label'] == $optionLabel) {
return $option['value'];
}
}
return false;
}
老實說,我是從其他來源/作者那里找到的,所以我要感謝這里和那里的一群聰明的程序員,因為花了我一段時間來完成這個簡單的任務,所以我在這里寫了解決方案,希望幫助你們 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.