Программное создание и обновление простого товара в Magento

Иногда необходимо добавить или обновить множество простых товаров и их свойств, которых тоже может быть много. Вручную через админку делать это не очень удобно.

Эту проблему можно легко решить путем добавления товаров программно.

Я покажу вам пример как добавить простой товар программно. Немного изменив этот код вы легко сможете его адаптировать под свой продукт или использовать его для импорта и обновления через xml или csv, тут как говорится всё зависит от вашей фантазии и необходимости.

Вы можете вызывать этот код через обсервер (observer) используя как контроллер (controller), или просто как php файл например из корня сайта. Обязательно убедитесь что вы в создание товара не используете уже существующий артикул или существующий ID товара. Т.к. это может повлечь за собой ошибку.

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '193-1' for key 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID'

Для проверки вы можете использовать условие, например такое или подобное:

if(!$product->getIdBySku('testsku61')):

 

Создание простого товара magento

Давайте перейдем непосредственно к коду.

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product');
//    if(!$product->getIdBySku('testsku61')):
 
try{
$product
//    ->setStoreId(1) //установка ID магазина, к которому относится товар
    ->setWebsiteIds(array(1)) //ID сайта, можно использовать массив как и в строке выше
    ->setAttributeSetId(9) //ID набора аттрибутов, например  "default"
    ->setTypeId('simple') //Тип товара
    ->setCreatedAt(strtotime('now')) //Время создания товара
//    ->setUpdatedAt(strtotime('now')) //Время обновления продукта
     ->setSku('testsku61') //Артикул
    ->setName('test product21') //Название товара
    ->setWeight(4.0000)//Вес товара
    ->setStatus(1) //Статус товара (1 - enabled, 2 - disabled)
    ->setTaxClassId(4) //Налоговый класс (0 - none, 1 - default, 2 - taxable, 4 - shipping)
    ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //Видимость товара
    ->setManufacturer(28) //ID производителя (как программно определить ID свойства с выпадающим списком и множественный выбор, я расскажу в дальнейших статьях)
    ->setColor(24)// ID цвета 
    ->setNewsFromDate('06/26/2014') //Считать товар новым с 
    ->setNewsToDate('06/30/2014') //Считать товар новым по
    ->setCountryOfManufacture('AF') //Страна производителя (2-значный код страны)
     ->setPrice(11.22) //Цена товара
    ->setSpecialPrice(00.44) //Специальная цена товара
    ->setSpecialFromDate('06/1/2014') //Специальная цена с  (MM-DD-YYYY)
    ->setSpecialToDate('06/30/2014') //Специальная цена по (MM-DD-YYYY)
    ->setMetaTitle('test meta title 2')
    ->setMetaKeyword('test meta keyword 2')
    ->setMetaDescription('test meta description 2')
    ->setDescription('This is a long description')
    ->setShortDescription('This is a short description')
    ->setMediaGallery (array('images'=>array (), 'values'=>array ())) //Установка медиа галереи
    ->addImageToMediaGallery('media/catalog/product/1/0/10243-1.png', array('image','thumbnail','small_image'), false, false) //Установка изображения в галерее
//Установка склада
    ->setStockData(array(
                       'manage_stock'=>1, //Управление наличием 1-да
                       'min_sale_qty'=>1, //Минимальное количество в корзине
                       'max_sale_qty'=>2, //Максимальное количество в корзине
                       'is_in_stock' => 1, //Наличие на складе
                       'qty' => 999 //Количество
                   )
    )
 
    ->setCategoryIds(array(3, 10)); //Присвоить категории 
$product->save();
//endif;
}catch(Exception $e){
Mage::log($e->getMessage());
}

Многие строчки в коде можно не использовать, все зависит от настроек вашего магазина или от того что конкретно вам необходимо обновить или создать.

 

Обновление простого товара magento

Если вам понадобится обновить существующий товар, можно использовать предыдущий код, для обновления товаров. Но для этого надо получить сущность существующего товара, это можно делать разными способами, я покажу два примера:

    1. С помощью артикула товара
$product = Mage::getModel('catalog/product')->loadByAttribute('sku','Артикул товара');

С помощью этого вызова вы можете использовать любое уникальное свойство

    1. С помощью конкретного ID товара
$product = Mage::getModel('catalog/product')->load('ID Товара');

Получив существующий продукт можно обновить данные по нему

if ($product) {
  ....
  //Здесь установим те свойства, что мы хотим обновить
  ....
  $product ->save();
  $updated++; 
  //Обновляем наши новые данные
  }