Magento 2

Como criar um produto no Magento 2 via PHP

Post ensinando a como criar um produto no 2 via .

Para criar um produto no 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 .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 .

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.

 

 

Post Recentes

Por que devo sempre manter o Magento 2 atualizado?

Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…

1 mês atrás

Adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2

Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…

1 mês atrás

Exibir mensagens erro/sucesso da Classe: Magento\Framework\Message\ManagerInterface

Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…

1 mês atrás

Exportar as categorias do Magento 2 em um XML

Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…

2 meses atrás

Colocar um video como Background utilizando HTML + CSS

Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…

4 meses atrás

Desativar o “lastname” no Magento 2

Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…

4 meses atrás