Post ensinando a como criar um produto no Magento 2 via PHP.

Para criar um produto no Magento 2 via PHP devemos incluir 2 classes para realizar a injeção de dependência “dependency injection” no construtor da classe que iremos utilizar.
O que é dependency injection no Magento 2?
O Magento 2 usa a injeção de dependência como uma alternativa à classe Magento 1.x Mage. A injeção de dependência é o conceito do ambiente externo que injeta dependências de um objeto em vez do objeto criando-os manualmente internamente.
Iremos utilizar:
- \Magento\Catalog\Api\Data\ProductInterfaceFactory
- \Magento\Catalog\Api\ProductRepositoryInterface
public function __construct(\Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository)
{
$this->productFactory = $productFactory;
$this->productRepository = $productRepository;
}
Após isso você já poderá criar o produto em alguma função dentro de sua classe:
$product = $this->productFactory->create();
$product->setSku('SAMPLE-ITEM');
$product->setName('Sample Item');
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE);
$product->setVisibility(4);
$product->setPrice(1);
$product->setAttributeSetId(4); // Grupo padrão de atributos.
$product->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
$this->productRepository->save($product);
Para criar um módulo e utilizar como base para este tutorial acesse: Como criar um Módulo no Magento 2
Exemplo completo:
Modelo com todas as dependências, “factory” e upload de imagens.
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Controller\ResultFactory;
class Addsimpleproduct extends \Magento\Framework\App\Action\Action
{
protected $_resultPageFactory;
protected $_fileUploaderFactory;
public function __construct(Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory)
{
$this->_resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$islogin = $objectManager->create('Magento\Customer\Model\Session'); // check is login
if(!$islogin->isLoggedIn())
{
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$url='customer/account/login';
$resultRedirect->setPath($url);
$this->messageManager->addSuccess(__('Session Expired...!'));
return $resultRedirect;
exit;
}
$_id=$this->getRequest()->getParam('_id');
$category = $this->getRequest()->getParam('categorylist');
$pname = $this->getRequest()->getParam('pname');
$pdescription = $this->getRequest()->getParam('pdescription');
$pshortdescription = $this->getRequest()->getParam('pshortdescription');
$sku = $this->getRequest()->getParam('sku');
$price = $this->getRequest()->getParam('price');
$spprice = $this->getRequest()->getParam('spprice');
$spfrom = $this->getRequest()->getParam('spfrom');
$spto = $this->getRequest()->getParam('spto');
$stock = $this->getRequest()->getParam('stock');
$stockavailiable = $this->getRequest()->getParam('stockavailiable');
$visiblibilty = $this->getRequest()->getParam('visiblibilty');
$tax = $this->getRequest()->getParam('taxclass');
$weight_radio= $this->getRequest()->getParam('weight_radio');
if($weight_radio==1)
{
$weight = $this->getRequest()->getParam('weight');
}
$metatitle = $this->getRequest()->getParam('metatitle');
$metakey = $this->getRequest()->getParam('metakey');
$metadesc = $this->getRequest()->getParam('metadesc');
$maxqty = $this->getRequest()->getParam('maxqty');
$download = $this->getRequest()->getParam('download');
$virtual=$this->getRequest()->getParam('producttype');
$title1 = "";
$title2 = "";
$separately1 = 0;
$is_down = "simple";
$data = $objectManager->get('\Magento\Catalog\Model\Product');
if($_id!="")
{
$data ->load($_id);
}
$data
->setWebsiteIds(array(1))
->setStoreId(1) //you can set data in store scope
->setAttributeSetId(4) //ID of a attribute set named 'default'
->setTypeId($is_down) //product type
->setCreatedAt(strtotime('now')) //product creation time
->setSku($sku); //SKU
if($weight_radio==1)
{
$data->setWeight($weight);
}
$data->setName($pname) //product name
->setStatus(2) //product status (1 - enabled, 2 - disabled)
->setTaxClassId($tax) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
->setVisibility($visiblibilty)
->setPrice($price) //price in form 11.22
->setSpecialPrice($spprice) //special price in form 11.22
->setSpecialFromDate($spfrom) //special price from (MM-DD-YYYY)
->setSpecialToDate($spto) //special price to (MM-DD-YYYY)
->setMetaTitle($metatitle)
->setMetaKeyword($metakey)
->setMetaDescription($metadesc)
->setDescription( $pdescription)
->setShortDescription($pshortdescription)
->setCategoryIds($category)
->setStockData(array(
'manage_stock' => 1,
'max_sale_qty' => $maxqty, //Maximum Qty Allowed in Shopping Cart
'is_in_stock' => $stockavailiable,
'qty' => $stock
)
);
// $data->setQuantityAndStockStatus(['qty' => $stock, 'is_in_stock' => $stockavailiable]);
if($download=='yes')
{
$data->setData('links_title',$title1);
$data->setData('samples_title',$title2);
$data->setData('links_purchased_separately',$separately1);
}
$customerSession = $objectManager->create('Magento\Customer\Model\Session');
$sid=$customerSession->getCustomer()->getId();
$cname=$customerSession->getCustomer()->getName();
$data->setSellerid($sid);
$data->setApprovalstatus("Pending");
$fileSystem = $objectManager->create('\Magento\Framework\Filesystem');
$filename= $this->getRequest()->getParam('path');
$files=explode(',',$filename);
if($filename!='')
{
foreach($files as $file)
{
$filepath='/catalog/product' .trim($file);
try{
$data->addImageToMediaGallery($filepath, array('image','thumbnail','small','swatch'), false, false);
}catch(Exception $e)
{
}
}
}
$data->save();
}
}
Utilizando o ObjectManager
Primeiro instanciamos o ObjectManager e criamos o objeto que iremos utilizar: Magento\Catalog\Model\Product
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\Product');
Com o model do Product instanciado, definidos os atributos que desejamos.
$product->setSku('my-sku');
$product->setName('Sample Simple Product');
$product->setAttributeSetId(4); // ID do grupo de atributos
$product->setStatus(1); // Status, 1 para ativo, 0 desativiado
$product->setWeight(10);
$product->setVisibility(4); // visibilidade do produto (catalog / search / catalog, search / Not visible individually)
$product->setTaxClassId(0);
$product->setTypeId('simple');
$product->setPrice(100);
Parâmetros para o estoque:
$product->setStockData(
array(
'use_config_manage_stock' => 0,
'manage_stock' => 1,
'is_in_stock' => 1,
'qty' => 999999999
)
);
Para adicionar uma imagem no produto utilizamos:
$imagePath = "sample.jpg"; // caminho completo para a imagem
$product->addImageToMediaGallery($imagePath, array('image', 'small_image', 'thumbnail'), false, false);
$product->save();
Para adicionar atributos/opções personalizadas usamos:
$options = array(
array(
"sort_order" => 1,
"title" => "Custom Option 1",
"price_type" => "fixed",
"price" => "10",
"type" => "field",
"is_require" => 0
),
array(
"sort_order" => 2,
"title" => "Custom Option 2",
"price_type" => "fixed",
"price" => "20",
"type" => "field",
"is_require" => 0
)
);
foreach ($options as $arrayOption) {
$product->setHasOptions(1);
$product->getResource()->save($product);
$option = $objectManager->create('\Magento\Catalog\Model\Product\Option')
->setProductId($product->getId())
->setStoreId($product->getStoreId())
->addData($arrayOption);
$option->save();
$product->addOption($option);
}
Conclusão de como criar um produto no Magento 2 via PHP
A utilização do ObjectManager para fins como esse não é considerado uma boa pratica, utilize o exemplo acima apenas como conteúdo didático.
Conheça mais sobre a utilização deste recurso clicando aqui.
Você está encontrando alguma dificuldade para fazer essa implementação? Entre em contato ou faça um comentário.