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.