當添加新的簡單產品(通過CSV或手動)時,我們需要檢查是否已添加相應的可配置產品(其中SKU =「item_number-item_colour_code」,例如BLEA2606B-BK001)。如果可配置產品存在,則關聯簡單產品。如果可配置產品不存在,則使用簡單產品中的數據進行創建,然後關聯簡單產品。 我從HERE發現了一些幫助,但不知道如何檢查可配置產品是否已經存在,以及是否如何創建一個。在導入時創建可配置產品csv
Here是我下載的腳本文件。任何人都可以建議,如果這將適用於我的方案?
EDITED
我已經刮進口創建配置產品的想法。我現在通過捕獲catalog_product_save_after事件來完成它。希望這會讓我有個地方。
編輯2
OK,最後,我有工作。我在觀察員那裏做。我知道它會減慢產品保存過程,但無法想到任何其他方式。那是我在做什麼:
public function productSave($observer)
{
$p = $observer->getProduct();
$pr = Mage::getModel('catalog/product')->load($p->getId());
$attributeValue = Mage::getResourceModel('catalog/product')->getAttributeRawValue($pr->getId(), 'size'); //loads attribute option value
$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($pr)->getQty();
Mage::log('Qty: '.$qtyStock.$pr->getId(), null, 'test.txt');
if ($pr->getTaxClassId() == '0' || !isset($pr->getTaxClassId)) {
$taxClass = 'None';
} elseif ($pr->getTaxClassId() == '2') {
$taxClass = 'Taxable Goods';
} elseif ($pr->getTaxClassId() == '4') {
$taxClass = 'Shipping (not used by AvaTax)';
} elseif ($pr->getTaxClassId() == '5') {
$taxClass = 'General';
}
$_configSku = $pr->getItemNumber().'-'.$pr->getItemColourCode();
$category = array();
$categoryCollection = $pr->getCategoryCollection();
foreach ($categoryCollection as $cat) {
$category[] = $cat->getId();
}
$_configExist = Mage::getModel('catalog/product')->loadByAttribute('sku',$_configSku);
if($_configExist && $_configSku != '-') {
//Mage::log($_configExist, null, 'test.txt');
//Mage::log($_configSku, null, 'test.txt');
$new_ids = array();
$current_ids = $_configExist->getTypeInstance()->getUsedProductIds();
foreach($current_ids as $temp_id)
{
$new_ids[] = $temp_id;
}
}
if(!$_configExist && $_configSku != '-') {
$att_size = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product','size');
$att_sizes = $this->__getAttList('size');
$confProduct = Mage::getModel('catalog/product');
$confProduct->setAttributeSetId('10');
$confProduct->setSku($_configSku);
$confProduct->setTypeId('configurable');
$confProduct->setName($pr->getName());
$confProduct->setDescription($pr->getDescription());
$confProduct->setShortDescription($pr->getShortDescription());
$confProduct->setCreatedAt(strtotime('now'));
$confProduct->setPrice($pr->getPrice());
$confProduct->setStatus(1);
$confProduct->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
$confProduct->setWebsiteIDs(array(1));
$confProduct->setStockData(array(
'is_in_stock' => 1,
'qty' => 9999
));
$confProduct->setTaxClassId($taxClass);
$confProduct->setCategoryIds($category);
/* Set Configurable Attributes */
$confProduct->setConfigurableAttributesData($tmp = array(
array_merge($att_size->getData(), array('label' => '', 'values' => $size_values))
));
$simpleProducts = array(
$pr->getId()=>array('attribute_id'=>'145', 'label'=>'size', 'value_index'=>$attributeValue, 'is_percent'=>0, 'pricing_value'=>'')
);
/* Set Associated Products */
$confProduct->setConfigurableProductsData($simpleProducts);
//print_r(get_class_methods($confProduct));
$confProduct->save();
}
elseif ($_configExist && !in_array($pr->getId(), $new_ids)) {
$new_ids = array();
$current_ids = $_configExist->getTypeInstance()->getUsedProductIds();
$current_ids[] = $pr->getId();
$current_ids = array_unique($current_ids);
foreach($current_ids as $temp_id)
{
parse_str("position=", $new_ids[$temp_id]);
}
Mage::log('inside', null, 'test.txt');
Mage::log($current_ids, null, 'test.txt');
$_configExist->setConfigurableProductsData($new_ids)->save();
}
一切工作正常,手動保存產品/更新和導入CSV(它是緩慢的,但工程)。唯一的是,在可配置產品中,屬性名稱字段爲空。如何在那裏設置屬性名稱?
但是,主要問題是,我們要檢查是否已添加可配置產品(其中SKU =「item_number-item_colour_code」,例如BLEA2606B-BK001)。如果不僅然後創建可配置的產品。我不確定magmi是否會這樣做。我只想知道我應該在哪裏編寫腳本。我正在編寫該需求的腳本,但不知道是否應該捕獲catalog_product_save_after觀察器並在那裏執行操作,或覆蓋productController並將其保存在saveAction中。我希望通過導入csv或手動創建/更新prduct檢查產品保存。有什麼建議麼。 – Hum 2012-03-14 17:00:14