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?

2017-09-14T18:53:14+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x