আপনার যদি পণ্যের চিত্রটির আকার পরিবর্তন করতে হবে এবং ডিফল্ট ম্যাজেন্টো ইমেজ ক্যাশে সিস্টেমটি ব্যবহার করতে হবে এবং আপনি সীমান্ত অঞ্চলে নেই, আপনি এই কাজটি ব্যবহার করতে পারেন।
কেস ব্যবহার করুন: যদি আপনার বাহ্যিক অ্যাপ্লিকেশনটির জন্য আপনার কাস্টম API এ পুনরায় আকার দেওয়া চিত্রের URL প্রয়োজন হয় তবে এটি কার্যকর হতে পারে।
ফাংশন কোড:
/**
* @var \Magento\Catalog\Model\ProductFactory
*/
protected $productFactory;
/**
* @var \Magento\Catalog\Helper\ImageFactory
*/
protected $helperFactory;
/**
* @var \Magento\Store\Model\App\Emulation
*/
protected $appEmulation;
/**
* Constructor.
*
* @param \Magento\Catalog\Model\ProductFactory $productFactory
* @param \Magento\Store\Model\App\Emulation $appEmulation
* @param \Magento\Catalog\Helper\ImageFactory $helperFactory
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
*/
public function __construct(
\Magento\Catalog\Model\ProductFactory $productFactory,
\Magento\Store\Model\App\Emulation $appEmulation,
\Magento\Catalog\Helper\ImageFactory $helperFactory,
\Magento\Store\Model\StoreManagerInterface $storeManager,
) {
$this->productFactory = $productFactory;
$this->imageBuilder = $imageBuilder;
$this->helperFactory = $helperFactory;
$this->appEmulation = $appEmulation;
$this->storeManager = $storeManager;
}
/**
* Retrieve product image
*
* @param \Magento\Catalog\Model\Product $product
* @param string $imageId
* @param array $attributes
* @return \Magento\Catalog\Block\Product\Image
*/
public function getImage($product, $imageId, $attributes = [])
{
$image = $this->helperFactory->create()->init($product, $imageId)
->constrainOnly(true)
->keepAspectRatio(true)
->keepTransparency(true)
->keepFrame(false)
->resize(200, 300);
return $image;
}
public function customFunction()
{
// some stuff here
$storeId = $this->storeManager->getStore()->getId();
$this->appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
$product = $this->productFactory->create()->loadByAttribute('sku', 'productSKU');
$imageUrl = $this->getImage($product, 'product_base_image')->getUrl();
echo $imageUrl;
$this->appEmulation->stopEnvironmentEmulation();
// some stuff here
}
আউটপুট উদাহরণ:
http://{domain}/media/catalog/product/cache/1/image/200x300/e9c3970ab036de70892d86c6d221abfe/s/r/{imageName}.jpg
মন্তব্যসমূহ:
আপনি যদি একই স্টোরআইডে থাকেন তবে ফাংশন স্টার্টইনমেন্টমেন্টমুলেশনটির তৃতীয় প্যারামিটারটি ফ্রন্টএন্ড এরিয়া ব্যবহার করার জন্য জোর করা হয়। (এপিআই অঞ্চলের জন্য দরকারী)
এই ধরণের ত্রুটিগুলি এড়াতে আপনাকে এড়াতে হবে:
http://XXXX.com/pub/static/webapi_rest/_view/en_US/Magento_Catalog/images/product/placeholder/.jpg
Uncaught Magento\Framework\View\Asset\File\NotFoundException: Unable to resolve the source file for 'adminhtml/_view/en_US/Magento_Catalog/images/product/placeholder/.jpg'