2011-09-19 45 views
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)。

+2

你必須重新編制它,那你的腳本中沒有發生什麼 –

+1

當我完全錯過了這個評論..無論如何,我已經找到了解決方案。它不重新索引,我缺少網站ID。在我設置它之後,它的所有工作都非常棒。 – exentric

+0

令人驚訝的是,一個問題成爲我的答案。感謝代碼片段 – Anand

回答

0

它在導入時與索引有關。您必須在導出工作表中缺少關聯商品和商店所需的字段。它在保存時起作用的原因是因爲它重建了填充缺失數據的表索引。

相關問題