3
我目前正在學習如何創建Magento的可配置產品。其所有工作正常,產品已成功導入使用我的代碼,包括其相關產品。問題是該產品沒有在前端顯示。我必須手動進入後端,編輯產品並保存。注意我不需要改變任何東西,我只需要打開它並保存即可。只有這樣它纔會出現在前端。任何想法爲什麼是這樣?Magento可配置產品工作,但不顯示,直到重新保存
define('MAGENTO', dirname(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
require_once 'FeedMag.php';
$myFeed = new FeedMag();
Mage::app();
// test data
$sku = "TESTSKU2";
$inventory = "10";
$stockData['qty'] = $inventory;
$stockData['is_in_stock'] = 1;
$simple['Description'] = 'Configurable Product 1';
$simple['ShortDescription'] = 'Short Description';
$simple['LongDescription'] = 'Long Description';
$simple['BrandCode'] = 'Nike';
$attr['color'] = 'Blue';
$attr['size'] = 1;
$price = 11;
// get attribute id
foreach($attr AS $key=>$value) {
$attr_ids[] = $myFeed->attributeValueExists($key, $value);
}
$new = false;
echo "<pre>";
try {
// get product id from SKU
$id = Mage::getModel('catalog/product')->getIdBySku($sku);
// load product if id exist or create a new one
if($id && $id > 0) {
$product = Mage::getModel('catalog/product')->load($id);
}
else {
$product = Mage::getModel('catalog/product')->setSku($sku);
$new = true;
}
// set it to configurable
$product->setTypeId('configurable');
// get attributes' id
$usingAttributeIds = $new_array = array();
foreach($attr as $key=>$value) {
$attribute = $product -> getResource() -> getAttribute($key);
if ($product -> getTypeInstance() -> canUseAttribute($attribute)) {
if ($new) { // fix for duplicating attributes error
$usingAttributeIds[] = $attribute -> getAttributeId();
}
}
}
// if we have attributes' ID, set it to the product
if (!empty($usingAttributeIds)) {
$product -> getTypeInstance() -> setUsedProductAttributeIds($usingAttributeIds);
$attributes_array = $product->getTypeInstance()->getConfigurableAttributesAsArray();
foreach($attributes_array as $key => $attribute_value) {
$attributes_array[$key]['label'] = $attribute_value['frontend_label'];
}
$product -> setConfigurableAttributesData($attributes_array);
$product -> setCanSaveConfigurableAttributes(true);
$product -> setCanSaveCustomOptions(true);
}
// set product data
$product->setStoreId(0)
->setAttributeSetId(4)
->setStockData($stockData)
->setPrice($price)
->setName($simple['Description'])
->setShortDescription($simple['ShortDescription'])
->setDescription($simple['LongDescription'])
->setCategoryIds(array(3))
->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
->setBrand($simple['BrandCode'])
->setStatus(1)
->setTaxClassId(2) //Taxable goods
->save();
// get previous children if any
$associated = Mage::getModel('catalog/product_type_configurable')
->getChildrenIds($product->getId());
// add new simple product to configurable product
$associated[0][] = Mage::getModel('catalog/product')->getIdBySku('SIMPLE1');
// add all simple product to configurable product
Mage::getResourceModel('catalog/product_type_configurable')
->saveProducts($product->getId(), array_unique($associated[0]));
}
catch (Mage_Core_Exception $e) {
echo $e->getMessage();
}
catch (Exception $e) {
echo $e;
}
echo "</pre>";
FeedMag是由我的同事製作的自定義類。那裏有很多方法,但爲了這個目的,我只用一個; attributeValueExists檢查是否存在該屬性,如果存在,則返回其ID。
簡單的產品已經存在,所以我只需要使用它(SIMPLE1)。
你必須重新編制它,那你的腳本中沒有發生什麼 –
當我完全錯過了這個評論..無論如何,我已經找到了解決方案。它不重新索引,我缺少網站ID。在我設置它之後,它的所有工作都非常棒。 – exentric
令人驚訝的是,一個問題成爲我的答案。感謝代碼片段 – Anand