Создание настраиваемого продукта при импорте CSVPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Создание настраиваемого продукта при импорте CSV

Сообщение Anonymous »

При добавлении нового простого продукта (через CSV или вручную) нам необходимо проверить, был ли добавлен соответствующий настраиваемый продукт (где SKU = «номер_элемента-item_colour_code», например BLEA2606B-BK001). Если настраиваемый продукт существует, свяжите простой продукт. Если настраиваемый продукт не существует, создайте его, используя данные простого продукта, И затем свяжите простой продукт.
Я нашел некоторую помощь ЗДЕСЬ, но не знаю, как проверить, существует ли уже настраиваемый продукт, а если нет, то как чтобы создать его.

Вот файл сценария, который я скачал. Может ли кто-нибудь посоветовать, будет ли это работать с моим сценарием?

ОТРЕДАКТИРОВАНО

Я отказался от идеи создания настраиваемого продукта при импорте. Я делаю это, фиксируя событие 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 (это медленно, но работает). Единственное, в настраиваемом продукте поле «Имя атрибута» пусто. Как установить там имя атрибута?

Подробнее здесь: https://stackoverflow.com/questions/970 ... import-csv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»