首页 文章

以magento编程方式创建可配置产品

提问于
浏览
2

我正在尝试使用简单的产品集合创建具有属性颜色和大小的可配置产品 .

为此,我为各个简单的产品创建了一个名为 configurable_sku 的自定义属性,并填充了常用的SKU . 使用此 SKU ,我们可以分组创建可配置的产品 .

我从 $product_sku_collection['sku'] 收集了如下,

...
array (size=387)
  0 => 
    array (size=2)
      'conf' => string '753315' (length=6)
      'simpleprodcollection' => 
        array (size=1)
          0 => 
            array (size=10)
              ...
  1 => 
    array (size=2)
      'conf' => string '753319' (length=6)
      'simpleprodcollection' => 
        array (size=1)
          0 => 
            array (size=10)
              ...

下面是我到目前为止尝试的php脚本 .

<?php
set_time_limit(0);
error_reporting(E_ALL | E_STRICT);
error_reporting(1);
ini_set('display_errors', 1);
define('D_S', DIRECTORY_SEPARATOR);
require_once 'app/Mage.php';
umask(0);
Mage::app();
if (function_exists('d') === false) {

    function d($data, $die = 0, $z = 1, $msg = 1) {
        echo"
<pre style='padding:2px 5px;background: none repeat scroll 0 0 #E04E19;clear: both;color: #FFFFFF;float: left;font-family: Times New Roman;font-style: italic;font-weight: bold;text-align: left;'>"; if ($z == 1) Zend_Debug::dump($data); else if ($z == 2) var_dump($data); else print_r($data); echo"</pre>"; if ($d == 1) die(); } } function get_attribute_id($option, $type) { $attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('catalog_product', $type); $attribute = Mage::getModel('catalog/resource_eav_attribute')->load($attributeId); $attributeOptions = $attribute->getSource()->getAllOptions(); foreach ($attributeOptions as $opts_arr) { if (strtoupper($opts_arr['label']) == strtoupper($option)) { return $opts_arr['value']; } } return FALSE; } $_simple_products = array(); function attributeValueExists($arg_attribute, $arg_value) { $attribute_model = Mage::getModel('eav/entity_attribute'); $attribute_options_model = Mage::getModel('eav/entity_attribute_source_table'); $attribute_code = $attribute_model->getIdByCode('catalog__simple_product', $arg_attribute); $attribute = $attribute_model->load($attribute_code); $attribute_table = $attribute_options_model->setAttribute($attribute); $options = $attribute_options_model->getAllOptions(false); foreach ($options as $option) { if ($option['label'] == $arg_value) { return $option['value']; } } return false; } //$_product = Mage::getModel('catalog/product')->load(46); $collection = Mage::getModel('catalog/product')->getCollection(); $collection->addAttributeToSelect('*'); // d($collection->getData()); exit; $in = 0; $product_sku_collection = array(); $product_dummy_collection = array(); foreach ($collection->getData() as $val) { $product_dummy_collection[$in] = $val; $collection = Mage::getModel('catalog/product')->getCollection(); $collection->addAttributeToFilter('confiugrable_sku', array('eq', $val['sku'])); if (count($collection->getData()) > 0) { $product_sku_collection['sku'][$in]['conf'] = $val['sku']; $product_sku_collection['sku'][$in]['simpleprodcollection'] = $collection->getData(); $in++; } } $color_attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 92); foreach ($color_attribute->getSource()->getAllOptions(true, true) as $option) { $attributeArray[$option['value']] = $option['label']; } //d($attributeArray); exit; $color_array = array(); $index = 0; foreach ($attributeArray as $value) { $value_index = get_attribute_id($value, 'color'); if ($value != '') { $color_array[$index] = array( 'value_index' => $value_index, 'label' => $value, 'is_percent' => 0, 'pricing_value' => '0', 'attribute_id' => '92' ); $index++; } } //d($color_array); exit; $size_attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 136); foreach ($size_attribute->getSource()->getAllOptions(true, true) as $option) { $sattributeArray[$option['value']] = $option['label']; } //d($attributeArray); exit; $size_array = array(); $index = 0; foreach ($sattributeArray as $value) { $value_index = get_attribute_id($value, 'size'); if ($value != '') { $size_array[$index] = array( 'value_index' => $value_index, 'label' => $value, 'is_percent' => 0, 'pricing_value' => '0', 'attribute_id' => '92' ); $index++; } } //d($size_array); exit; // exit; $cProduct = Mage::getModel('catalog/product'); $model = Mage::getModel('catalog/product'); $setConfigurableAttributesData = array( '0' => array('id' => NULL, 'label' => 'Color', 'position' => NULL, 'values' => $color_array, 'attribute_id' => 92, 'attribute_code' => 'color', 'frontend_label' => 'Color', 'html_id' => 'config_super_product__attribute_0' ), '1' => array('id' => NULL, 'label' => 'Clothing Size', 'position' => NULL, 'values' => $size_array, 'attribute_id' => 136, 'attribute_code' => 'size', 'frontend_label' => 'Clothing Size', 'html_id' => 'config_super_product__attribute_1') ); //d(($product_sku_collection['sku'])); exit; $index = 1; foreach ($product_sku_collection['sku'] as $key => $value) { $main_product_data = $model->load($value['simpleprodcollection']['0']['entity_id']); $main_pd_name = $main_product_data->getData('name'); $setConfigurableProductsData=array(); //d($value['simpleprodcollection']['0']['entity_id']); foreach ($value['simpleprodcollection'] as $v) { $clab = Mage::getModel('catalog/product')->load($v['entity_id'])->getAttributeText('color'); $cvalue_index = Mage::getResourceModel('catalog/product')->getAttributeRawValue($v['entity_id'], 'color'); $slab = Mage::getModel('catalog/product')->load($v['entity_id'])->getAttributeText('size'); $svalue_index = Mage::getResourceModel('catalog/product')->getAttributeRawValue($v['entity_id'], 'size'); $setConfigurableProductsData = array( $v['entity_id'] => array('0' => array('attribute_id' => '92', 'label' => $clab, 'value_index' => $cvalue_index, 'is_percent' => 0, 'pricing_value' => ''), '1' => array('attribute_id' => '136', 'label' => $slab, 'value_index' => $svalue_index, 'is_percent' => 0, 'pricing_value' => '') ) ); //d($setConfigurableProductsData); } $cProduct ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) ->setTaxClassId(5) ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED) ->setWebsiteIds(array(1)) ->setAttributeSetId(4) // You can determine this another way if you need to. ->setSku("C" . $main_product_data->getData('confiugrable_sku')) ->setName($main_product_data->getData('name')) ->setQty(25) ->setPlayer($main_product_data->getData('player')) ->setBrand($main_product_data->getData('brand')) ->setStyle($main_product_data->getData('style')) ->setShortDescription($main_product_data->getData('short_description')) ->setDescription($main_product_data->getData('description')) ->setPrice($main_product_data->getData('price')); $cProduct->setStockData(array( 'use_config_manage_stock' => 1, 'is_in_stock' => 1, 'is_salable' => 1, )); $cProduct->setConfigurableProductsData($setConfigurableProductsData); $cProduct->setConfigurableAttributesData($setConfigurableAttributesData); $cProduct->setCanSaveConfigurableAttributes(1); try { $cProduct->save(); //$productId = $cProduct->getId(); echo $index.") ".$cProduct->getId() . "====>" . $main_pd_name . " added\n"; } catch (Exception $e) { echo "$main_pd_name not added\n"; echo "exception:$e"; } $index++; } //****************-----------------*****************// ?>

当我运行此脚本时,它必须插入387个可配置产品及其各自的简单产品 . 但循环运行一次并停止执行, It inserts only one configurable product with their associated simple product but it has to insert all 387 configurable products. 我在哪里出错了 . 我一直检查找到它但不能 .

请对此提出一些建议

2 回答

  • -1

    最后我发现它,我们需要使用下面的代码进行循环

    $cProduct->save();
     $cProduct->unsetData();
    

    要使magento再次将您的数据识别为新模型,您只需取消设置模型ID即可

  • 4

    Mage::getModel('catalog/product'); 这实际上是在查询Magento注册表并获取该模型类型的缓存对象,这种重用对象的方式称为Singleton,而Magento就是众所周知的 . 在循环和持续需要新的唯一对象的情况下,使用该模型的标准构造函数调用 . 例如,在产品的情况下:
    $cProduct = new Mage_Catalog_Model_Product();

相关问题