2012-03-14 4 views
0

새 단순 제품을 CSV 또는 수동으로 추가 할 때 적절한 구성 가능한 제품 (SKU = "item_number-item_colour_code", 예 : BLEA2606B-BK001)이 추가되었는지 확인해야합니다. 구성 가능한 제품이 있으면 간단한 제품을 연결하십시오. 구성 가능한 제품이 존재하지 않으면 간단한 제품의 데이터를 사용하여 생성 한 다음 간단한 제품을 연결하십시오. HERE에서 도움을 얻었지만 구성 가능한 제품이 이미 있는지 확인하는 방법과 생성 방법이없는 경우 어떻게 확인해야할지 모릅니다.가져 오기 CSV에서 구성 가능한 제품 만들기

Here은 내가 다운로드 한 스크립트 파일입니다. 이것이 나의 시나리오와 함께 작동한다면 아무도 조언을 할 수 있습니까?

수정 됨 내가 가져 오기에 구성 가능한 제품을 만드는 아이디어를 스크랩 한

. 지금 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 가져 오기 (가 느린 있지만 작동)를 저장 설명서를 제품과 함께 잘 작동합니다. 유일한 것은 구성 가능한 제품에서 속성 이름 필드가 비어 있습니다. 속성 이름을 설정하는 방법은 무엇입니까?

답변

0

더 멋진 물건 수 있습니다. 솔루션에 대한 질문에서 EDITED 2 섹션을 참조하십시오.

0

magmi 당신은 쉽게 구성 제품을 만들고, 내가 길을 발견

+0

하지만 문제는 구성 가능한 제품 (SKU = "item_number-item_colour_code", 예 : BLEA2606B-BK001)이 추가되었는지 확인하는 것입니다. 뿐만 아니라 구성 가능한 제품을 만들면. magmi가이 작업을 수행 할 지 확실하지 않습니다. 스크립트 작성 위치를 알고 싶습니다. 나는 catalog_product_save_after 옵저버를 잡아서 거기서해야하는지, 아니면 productController를 덮어 쓰고 saveAction에 붙여야하는지에 대한 요구 사항을위한 스크립트를 작성하고있다. import csv 또는 수동으로 prduct 생성/업데이트 중 하나를 통해 제품 저장시이를 확인하고 싶습니다. 어떤 제안. – Hum