[Magento 2] Dodanie produktu do sklepu - PHP

  • Start
  • Blog
  • [Magento 2] Dodanie produktu do sklepu - PHP
16-11-2018

Wbudowane mechanizmy importu w Magento 2 umożliwiają import/aktualizacje produktów z plików csv. Zdarza się jednak że jesteśmy zmuszeni synchronizować stany magazynowe, ceny lub dodawać "całe" produkty z poziomu kodu. Mamy do wyboru kilka ścieżek aby to wykonać m.in. bezpośrednio poprzez bazę danych [rozwiązanie najszybsze obarczone jednak problemem weryfikacji danych i zależności po stronie naszego kodu], korzystanie z metod i funkcji Magento [częściowa walidacja danych i obsługa zależności po stronie klas Magento] i poprzez API [pełna walidacja po stronie sklepu].

Poniżej prezentuję kod który po dopasowaniu można ożyć by dodać produkt do sklepu z poziomu pliku umieszczonego w katalogu instalacji magento. Część zmiennych zadeklarowanych jest nieużywana w kodzie, mogą się one przydać po modyfikacjach kodu dlatego pozostawiłem je w kodzie.

try {
require __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
echo "problem";
exit(1);
}
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);

$objectManager = $bootstrap->getObjectManager();
$url = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $url->get('\Magento\Store\Model\StoreManagerInterface');
$mediaurl= $storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);//[url do katalogu media]
$state = $objectManager->get('\Magento\Framework\App\State');
$state->setAreaCode('frontend');
$websiteId = $storeManager->getWebsite()->getWebsiteId(); //[id widoku sklepu]
$store = $storeManager->getStore();
$storeId = $store->getStoreId();//[id sklepu]
$rootNodeId = $store->getRootCategoryId(); //[id kategori root]

$_product = $objectManager->create('Magento\Catalog\Model\Product');
                $_product->setName('Nazwa produktu');
                
                $_product->setTypeId('simple');//typ produktu
                $_product->setAttributeSetId(4);
                $_product->setSku( 'SKU produktu');
                $_product->setWebsiteIds(array(1));
                $_product->setVisibility(4);
                $_product->setPrice(array(1));
                $_product->setStockData(array(
                        'use_config_manage_stock' => 0, 
                        'manage_stock' => 1, //zarządznie magazynem
                        'min_sale_qty' => 1, 
                        'max_sale_qty' => 2,
                        'is_in_stock' => 1, //status magazynu [jest/brak]
                        'qty' => $i->carteQuantity //ilosc w magazynie
                        )
                    );
                $_product->save();

Poprzedni wpis Nastepny wpis