Menu Close
    Hire Us Request Quote Reading List Switch to Dark Mode

    Add image to a product created by installer in magento2

    Today i am explaining, if you want to created a product in magento2 using installer then you can follow following link:

    Create Product By Installer

    Now, if you want to assign an image to that product, then you can follow the mentioned process:

    Firstly you need to manage your image, i.e. you need to move your file from your module folder to media folder.

    your image file should be at: /app/code/Webkul/Test/view/frontend/web/images/upload.png

    Now add following code in /app/code/Webkul/Test/Setup/InstallSchema.php

    <?php
    namespace Webkul\Test\Setup;
    
    use Magento\Framework\Setup\InstallSchemaInterface;
    use Magento\Framework\Setup\ModuleContextInterface;
    use Magento\Framework\Setup\SchemaSetupInterface;
    
    class InstallSchema implements InstallSchemaInterface
    {
        public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
        {
            $this->moveDirToMediaDir();
            //rest code of installer
        }
        /**
         * moveDirToMediaDir move directories to media
         * @return void
         */
        private function moveDirToMediaDir()
        {
            try {
                $objManager = \Magento\Framework\App\ObjectManager::getInstance();
                $reader = $objManager->get('Magento\Framework\Module\Dir\Reader');
                $filesystem = $objManager->get('Magento\Framework\Filesystem');
                $type = \Magento\Framework\App\Filesystem\DirectoryList::MEDIA;
                $smpleFilePath = $filesystem->getDirectoryRead($type)
                    ->getAbsolutePath().'test/';
                
                $modulePath = $reader->getModuleDir('', 'Webkul_test');
                $mediaFile = $modulePath.'/view/frontend/web/images/upload.png';
                if (!file_exists($smpleFilePath)) {
                    mkdir($smpleFilePath, 0777, true);
                }
    
                $filePath = $smpleFilePath.'upload.png';
                if (!file_exists($filePath)) {
                    if (file_exists($mediaFile)) {
                        copy($mediaFile, $filePath);
                    }
                }
            } catch (\Exception $e) {
                /*error*/
            }
        }
    }

    after executing this code your file moved to pub/media/test/upload.png

    Now in InstallData file, in which you are creating your product, add following code:

    namespace Webkul\Test\Setup;
    
    use Magento\Framework\Setup;
    use Magento\Framework\App\Filesystem\DirectoryList;
    
    class InstallData implements Setup\InstallDataInterface
    {
        /**
         * @var \Magento\Store\Model\StoreManagerInterface
         */
        protected $_storeManager;
        /**
         * @var \Magento\Catalog\Model\ProductFactory
         */
        protected $_productFactory;
        /**
         * @var \Magento\Catalog\Model\Product
         */
        protected $_productModel;
        /**
         * @var Installer
         */
        protected $_productType = \Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL;
        /**
         * @var \Magento\Framework\Filesystem
         */
        protected $_filesystem;
        protected $_objectManager;
        /**
         * @param \Magento\Catalog\Model\Product                $productModel
         * @param \Magento\Store\Model\StoreManagerInterface    $storeManager
         * @param \Magento\Catalog\Model\ProductFactory         $productFactory
         * @param \Magento\Framework\Filesystem                 $filesystem
         */
        public function __construct(
            \Magento\Catalog\Model\Product $productModel,
            \Magento\Store\Model\StoreManagerInterface $storeManager,
            \Magento\Catalog\Model\ProductFactory $productFactory,
            \Magento\Framework\Filesystem $filesystem,
            \Magento\Framework\ObjectManagerInterface $objectManager
        ) {
            $this->productModel = $productModel;
            $this->storeManager = $storeManager;
            $this->productFactory = $productFactory;
            $this->_filesystem = $filesystem;
            $this->_objectManager = $objectManager;
        }
    
        public function install(
            Setup\ModuleDataSetupInterface $setup,
            Setup\ModuleContextInterface $moduleContext
        ) {
            $appState = $this->_objectManager->get('Magento\Framework\App\State');
            $appState->setAreaCode('adminmhtml');
            $product = $this->productFactory->create();
            $attributeSetId = $this->productModel->getDefaultAttributeSetId();
            $product->setStoreId(\Magento\Store\Model\Store::DEFAULT_STORE_ID); 
            $product->setWebsiteIds([$this->storeManager->getDefaultStoreView()->getWebsiteId()]);
            $product->setTypeId($this->productType);
            $product->addData(array(
                'name' => 'Sample product',//name of product
                'attribute_set_id' => $attributeSetId,
                'status' => \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED, 
                'visibility' => \Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE, 
                'weight' => 1,
                'sku' => 'sample_product',//SKU of product
                'tax_class_id' => 0,
                'description' => 'sample_product',
                'short_description' => 'sample_product',
                'stock_data' => array( //stock management
                    'manage_stock' => 1,
                    'qty' => 999, 
                    'is_in_stock' => 1
                )
            ));
            $product->save();
    
            $imagePath = $this->getViewFileUrl().'test/upload.png';
    
            $product->addImageToMediaGallery($imagePath, ['image', 'small_image', 'thumbnail'], false, false);
            $product->save();
        }
        public function getViewFileUrl()
        {
            return $this->_filesystem
                ->getDirectoryRead(DirectoryList::MEDIA)
                ->getAbsolutePath();
        }
    }

    After this, your product with an image is created.

    Hope this blog is helps you.

    Thank you.

    . . .

    Comment

    Add Your Comment

    Be the first to comment.

    Back to Top
    css.php
    Hire Us!
    Brief us about your requirements and we'll get back to you.
    Woo! Hooy!
    We have just recieved your project brief and our expert will contact you shortly.
    Send Again
    Close