2012-03-14 5 views
0

新しい単純な製品が(CSVまたは手動で)追加されると、適切な構成可能な製品(SKU = "item_number-item_colour_code"、たとえばBLEA2606B-BK001)が追加されているかどうかを確認する必要があります。設定可能な製品が存在する場合は、シンプルな製品を関連付けます。設定可能な製品が存在しない場合は、シンプルな製品のデータを使用して作成し、次にシンプルな製品を関連付けます。 HEREから助けがありましたが、設定可能な製品が既に存在するかどうかを確認する方法と、作成方法がわからない場合はどうすればよいですか。インポート時に構成可能な製品を作成するCSV

Hereは、ダウンロードしたスクリプトファイルです。これは私のシナリオではうまくいくのですか?

EDITED

私は輸入に設定可能な製品を作成するためのアイデアを掻き取ってきました。私は今catalog_product_save_afterイベントをキャプチャしてやっています。うまくいけば、それはどこかで私を得るでしょう。

EDITED 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ファイルを保存し、手動製品で正常に動作します(それは遅いですが、動作します):私がやっている厥。唯一のことは、構成可能な製品では、「属性名」フィールドは空です。そこに属性名を設定するには?

答えて

0

もっとすごいものができます。ソリューションの質問の「EDITED 2」セクションを参照してください。

0

magmiであなたは簡単に設定の製品を作成し、私は方法を発見した

+0

しかし、主な問題は、設定可能な商品が追加されたかどうか(SKU = "item_number-item_colour_code"、たとえばBLEA2606B-BK001)を確認することです。そうでない場合は、構成可能な製品を作成します。私はmagmiがこれをするかどうか分からない。私はスクリプトをどこに書くべきかを知りたいだけです。私は要件のスクリプトを書いていますが、catalog_product_save_afterオブザーバをキャッチしてそこに置くか、またはproductControllerを上書きしてsaveActionに貼り付けるべきかどうかは考えていません。私は、インポートcsvか手動でprductを作成/更新することで、製品の保存についてこれをチェックしたいと思います。助言がありますか。 – Hum

関連する問題