ম্যাজেন্টো 2: প্রোগ্রামের সাথে পণ্য চিত্রগুলি যুক্ত / মুছতে সেরা অনুশীলন?


18

আমি বিদ্যমান পণ্যগুলিতে ছবি আপলোড করতে চাই। ছবিতে আছে import_dir। এবং ক্যাটালগটিতে ইতিমধ্যে বিদ্যমান পণ্যগুলিতে তাদের যুক্ত করা দরকার।

এটি করার জন্য আমি কেবল 2 টি উপায় খুঁজে পেতে পারি।
1. "খারাপ অনুশীলন" উপায় - পণ্য মডেল ব্যবহার করে\Magento\Catalog\Model\Product::addImageToMediaGallery

1. Copy the images from `import_dir` to `pub/media/tmp`
2. Add the images to the product
3. Save product

কোড

    /* copy files from import_dir to pub/media/tmp */

    /** @var \Magento\Catalog\Api\Data\ProductInterface $product */
    /* Init media gallery */
    $mediaGalleryEntries = $product->getMediaGalleryEntries();
    if (empty($mediaGalleryEntries) === true){
        $product->setMediaGalleryEntries([]);
    }

    /* Add an image to the product's gallery */
    $product->addImageToMediaGallery(
        $filePathFromTmpDir,
        [
          "image",
          "small_image",
          "thumbnail",
          "swatch_image" 
        ],
        $moveImage,
        $disableImage
    );

    /* Save */
    $this->_productRepository->save($product);

2. "ভাল অনুশীলন" উপায় - এপিআই ব্যবহার করে \Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface::create

1. Create image content object via **\Magento\Framework\Api\Data\ImageContentInterfaceFactory**
2. Create image object via **\Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterfaceFactory**
3. Create an image via API

কোড

    $imageContent = $this->_imageContentInterfaceFactory->create()
        ->setBase64EncodedData(base64_encode(file_get_contents($filePathImportDir)))
        ->setType($this->_mime->getMimeType($filePathImportDir))
        ->setName($file_name);

    $newImage = $this->_productAttributeMediaGalleryEntryInterfaceFactory->create()
        ->setMediaType(\Magento\Catalog\Model\Product\Attribute\Backend\Media\ImageEntryConverter::MEDIA_TYPE_CODE)
        ->setFile($filePathImportDir)
        ->setDisabled($disableImage)
        ->setContent($imageContent)
        ->setLabel('label');

    $this->_productAttributeMediaGalleryManagement->create($product->getSku(), $newImage);

উদ্বেগ:

  • ইন 1 আমি একটি ত্রুটি, যা পেয়ে করছি জ্ঞাত সমস্যা

    অপরিজ্ঞাত সূচক: মিডিয়া_প্রকার

  • 2 ইন উপায় খুব জটিল এবং এটি সহজ উপায় হওয়া উচিত

প্রশ্নাবলী:

  • পণ্যের চিত্রগুলি পরিচালনা (যুক্ত, অপসারণ, প্রতিস্থাপন) করার জন্য কি "সেরা অনুশীলন" আছে?
  • \ ম্যাজেন্টো \ ক্যাটালগ আমদানি এক্সপোর্ট \ মডেল \ আমদানি \ পণ্য সহ একটি উপায় রয়েছে

উত্তর:


3

এটি আপনার দ্বিতীয় উপায়ে আরও কম বেশি ব্যবহার করে করা যেতে পারে:

<?php


namespace [vendor]\[moduleName]\Model\Adminhtml\Product\MediaGallery;

use \Magento\Catalog\Model\Product\Gallery\EntryFactory;
use \Magento\Catalog\Model\Product\Gallery\GalleryManagement;
use \Magento\Framework\Api\ImageContentFactory;

{

/**
 * @var \Magento\Catalog\Model\Product\Gallery\EntryFactory
 */
private $mediaGalleryEntryFactory;


/**
 * @var \Magento\Catalog\Model\Product\Gallery\GalleryManagement
 */
private $mediaGalleryManagement;


/**
 * @var \Magento\Framework\Api\ImageContentFactory
 */
private $imageContentFactory;


/**
 * @param \Magento\Catalog\Model\Product\Gallery\EntryFactory $mediaGalleryEntryFactory
 * @param \Magento\Catalog\Model\Product\Gallery\GalleryManagement $mediaGalleryManagement
 * @param \Magento\Framework\Api\ImageContentFactory $imageContentFactory
 */
public function __construct
(
    EntryFactory $mediaGalleryEntryFactory,
    GalleryManagement $mediaGalleryManagement,
    ImageContentFactory $imageContentFactory
)
{
    $this->mediaGalleryEntryFactory = $mediaGalleryEntryFactory;
    $this->mediaGalleryManagement = $mediaGalleryManagement;
    $this->imageContentFactory = $imageContentFactory;
}


/**
 * @param string $filePath
 * @param string $sku
 */
public function processMediaGalleryEntry($filePath, $sku)
{
    $entry = $this->mediaGalleryEntryFactory->create();

    $entry->setFile($filePath);
    $entry->setMediaType('image');
    $entry->setDisabled(false);
    $entry->setTypes(['thumbnail', 'image', 'small_image']);

    $imageContent = $this->imageContentFactory->create();
    $imageContent
        ->setType(mime_content_type($filePath))
        ->setName('test')
        ->setBase64EncodedData(base64_encode(file_get_contents($filePath)));

    $entry->setContent($imageContent);

    $this->mediaGalleryManagement->create($sku, $entry);
}

}

$filePathএকটি নিখুঁত পথ হওয়া উচিত - সম্ভবত আপনি কনস্ট্যান্স ব্যবহার করতে পারেন BP


এটি দুঃখজনক যে এটি সমাধানের জন্য আর কোনও ভাল উপায় নেই, কারণ @ জাকুব এলকজুক বলেছিলেন - এটি অত্যন্ত সীমাবদ্ধ। এই $entry->setMediaType('image');লাইনটি সম্পর্কে আমি পুরোপুরি নিশ্চিত নই, যতক্ষণ না আমার মনে আছে এটি আমার ত্রুটির কারণ হতে পারে যে এটির জন্য একটি "পিএনজি" বা "জেপিজি" টাইপ দরকার (সুতরাং শেষ পর্যন্ত এটি "চিত্র / পিএনজি" হওয়া উচিত)। তবে আবার, আমি নিশ্চিত নই
ওলগা ঝে

ম্যাজেন্টো ২.১.১ এ এটি কোনও ত্রুটির কারণ নয়।
বার্তোস্জ কুবিকি

কোনও পদ্ধতির ঠিকানা মুছে ফেলা বা প্রতিস্থাপন করা যায় না। শুধু একটি পর্যবেক্ষণ।
রুস্টার 242

0

আপনি একই জিনিসগুলি দেখার পরে স্পষ্টতই আমি ঠিক একই স্থানে রয়েছি এবং এর পরে আর কোনও ভাল উপায় খুঁজে পাচ্ছি না And এবং এটি 2 অত্যন্ত সীমাবদ্ধ। কার্যকরী পরীক্ষায় তারা সাধারণ পণ্য-> সংরক্ষণ () জিনিসটি ব্যবহার করে যা অন্যান্য সমস্যার কারণ হয় (ব্যক্তিগতভাবে আমার জন্য, url_key ইতিমধ্যে ত্রুটির উপস্থিতি রয়েছে)। দেখে মনে হচ্ছে কেবল ২ য় পদ্ধতি ব্যবহার করা যেতে পারে, তবে জটিল এবং বিভ্রান্ত বলে মনে হচ্ছে। তবে আমি ভাবছি যদি ২ য় পদ্ধতিতে আপনি আপলোড করা চিত্রগুলিকে থাম্বনেইল বা ছোট চিত্র হিসাবে সেট করার কোনও উপায় খুঁজে পেয়েছেন?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.