【问题标题】:Creating Configurable product on import csv在导入 csv 时创建可配置产品
【发布时间】:2012-03-14 11:53:19
【问题描述】:

添加新的简单产品时(通过 CSV 或手动),我们需要检查是否已添加适当的可配置产品(其中 SKU = "item_number-item_colour_code",例如 BLEA2606B-BK001)。如果可配置产品存在,则关联简单产品。如果可配置产品不存在,则使用简单产品中的数据创建,然后关联简单产品。 我从HERE 找到了一些帮助,但不知道如何检查可配置产品是否已经存在,如果不知道如何创建。

Here 是我下载的脚本文件。任何人都可以建议这是否适用于我的场景?

已编辑

我已经放弃了在导入中创建可配置产品的想法。我现在通过捕获 catalog_product_save_after 事件来做到这一点。希望这能让我有所收获。

已编辑 2

好的,最后,我让它工作了。我正在观察者中做这件事。我知道它会减慢产品保存过程,但想不出任何其他方式。这就是我正在做的:

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 都可以正常工作(速度很慢但可以)。唯一的问题是,在可配置产品中,属性名称字段为空。那里如何设置属性名?

【问题讨论】:

    标签: magento configurable csv-import


    【解决方案1】:

    使用magmi,您可以轻松创建可配置的产品,以及更多很棒的东西

    【讨论】:

    • 但主要问题是,我们要检查是否已添加可配置产品(其中 SKU = "item_number-item_colour_code" 例如 BLEA2606B-BK001)。如果不是那么创建可配置的产品。我不确定magmi是否会这样做。我只想知道我应该在哪里写脚本。我正在为需求编写脚本,但不知道是否应该捕获 catalog_product_save_after 观察者并在那里执行或覆盖 productController 并将其粘贴在 saveAction 中。我想通过导入 csv 或手动创建/更新产品来检查产品保存。任何建议。
    【解决方案2】:

    我找到了方法。有关解决方案,请参阅问题中的 EDITED 2 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2013-03-28
      • 2018-01-15
      相关资源
      最近更新 更多