ম্যাজেন্টো 2 এ কীভাবে পণ্য চিত্র এবং URL পাবেন?


16

এটি আমার পর্যবেক্ষক:

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $orderIds = $observer->getEvent()->getOrderIds();
    $order = $this->_orderRepositoryInterface->get($orderIds[0]);
    $items =$order->getAllVisibleItems();
    $productQuantity = array();
    $productPrice = array();
    $productName = array();
    $productIds = array();
    foreach($items as $item) {
        $productIds[]= $item->getProductId();
        $productName[]= $item->getSku(); 
        $productPrice[] = $item->getPrice();
        $productQuantity[]= floor($item->getQtyOrdered());
    }
}

আমি কীভাবে আইটেম থেকে পণ্য চিত্র এবং পণ্যের URL পেতে পারি?


আপনি কোন ইভেন্টে উঠেছে?
খোয়া ট্রুংদিনহ

checkout_onepage_controller_success_action
Ramkishan Suthar

উত্তর:


23

এই উপায়ে কোনও পণ্য চিত্র পাওয়ার সর্বোত্তম উপায় নাও হতে পারে।

\Magento\Catalog\Api\ProductRepositoryInterfaceFactoryআমাদের কনস্ট্রাক্টর ইনজেকশন ।

protected $_productRepositoryFactory;

public function __construct(
        \Magento\Catalog\Api\ProductRepositoryInterfaceFactory $productRepositoryFactory
) {

    $this->_productRepositoryFactory = $productRepositoryFactory;
}

আমরা চিত্রটি পেতে পারি:

$product = $this->_productRepositoryFactory->create()->getById($item->getProductId());
$product->getData('image');
$product->getData('thumbnail');
$product->getData('small_image');

আপনার উত্তরটি ঠিক আছে তবে আমি যদি কার্টে একাধিক পণ্য
রাখি

ঠিক আছে আমি এটি @ খোয়া পেয়েছি। যদি আমার একাধিক উত্পাদন চিত্র থাকে। অনেক ধন্যবাদ
রামকিশন সুথার

এটি কাজ করছে না। প্রত্যাশিত মানটি হ'ল "/w/s/wsh10-orange_main.jpg"
হোয়াং ত্রিনহ

2
@ পিয়াভ এটি চিত্রের পথ:pub/media/catalog/product
খোোয়া ট্রুংডিনহ

1
সুতরাং আমি কীভাবে <img src = "" /> বৈশিষ্ট্যে /w/s/wsh10-orange_main.jpg ব্যবহার করব যাতে আমি প্রকৃত চিত্রটি লোড করতে পারি
লাচেজার রায়চেভ

18

আপনি যদি কোনও নির্দিষ্ট স্টোর ভিউয়ের জন্য কোনও চিত্রের প্রকাশিত / ক্যাশে ফ্রন্টএন্ড URL চান (যেমন আমি করেছি) এটি আমার জন্য কাজ করছে:

/**
 * @var \Magento\Store\Model\App\Emulation
 */
protected $appEmulation;

/**
 * @var \Magento\Store\Model\StoreManagerInterface
 */
protected $storeManager;

/**
 * @var \Magento\Catalog\Api\ProductRepositoryInterfaceFactory
 */
protected $productRepositoryFactory;

/**
 * @var \Magento\Catalog\Helper\ImageFactory
 */
protected $imageHelperFactory;

/**
 * @param \Magento\Store\Model\StoreManagerInterface $storeManager
 * @param \Magento\Store\Model\App\Emulation $appEmulation
 * @param \Magento\Catalog\Api\ProductRepositoryInterfaceFactory $productRepositoryFactory
 * @param \Magento\Catalog\Helper\ImageFactory $helperFactory
 */
public function __construct(
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Store\Model\App\Emulation $appEmulation,
    \Magento\Catalog\Api\ProductRepositoryInterfaceFactory $productRepositoryFactory,
    \Magento\Catalog\Helper\ImageFactory $imageHelperFactory
)
{
    $this->storeManager = $storeManager;
    $this->appEmulation = $appEmulation;
    $this->productRepositoryFactory = $productRepositoryFactory;
    $this->imageHelperFactory = $imageHelperFactory;
}

তারপরে, যেখানেই আপনার প্রয়োজন চিত্রের সম্মুখভাগের URL:

$sku = "my-sku";
// get the store ID from somewhere (maybe a specific store?)
$storeId = $this->storeManager->getStore()->getId();
// emulate the frontend environment
$this->appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
// load the product however you want
$product = $this->productRepositoryFactory->create()->get($sku);
// now the image helper will get the correct URL with the frontend environment emulated
$imageUrl = $this->imageHelperFactory->create()
  ->init($product, 'product_thumbnail_image')->getUrl();
// end emulation
$this->appEmulation->stopEnvironmentEmulation();

আপনি এছাড়াও অন্যান্য চিত্রের প্রকারগুলি নির্বাচন করতে পারেন product_thumbnail_image: magento/theme-frontend-luma/etc/view.xmlউপলভ্য পণ্য চিত্রগুলির তালিকার জন্য দেখুন বা কোনও view.xmlফাইলটিতে নিজের তৈরি করতে পারেন ।


1
ডব্লিউটিএফ? এটি কেবল অসুস্থ: ডি
লাচেজার রায়চেভ

কেবল এই সমাধানটি চেষ্টা করে দেখেছি এবং আমি কোনও ত্রুটি পাচ্ছি না, যদিও ফিরে আসা URL টি উপস্থিত নেই এবং স্ট্রিংটি খালি empty আমি 'product_base_image', 'product_small_image' এবং 'product_thumbnail_image' দিয়ে চেষ্টা করেছি, যার কোনটিই কাজ করে না। আপনি দয়া করে পরামর্শ দিতে পারেন? বা পণ্য সংগ্রহস্থল ব্যবহার করে এটি করার কোনও কার্যকর উপায় আছে? যেহেতু আমি এটি ইতিমধ্যে আমার ব্লকের অন্যত্র লোড করছি।
জোশুয়া বন্যা

11

আপনার যদি কোনও পণ্যের ইউআরএল ফেরত দরকার হয় তবে এটির মতো দেখতে হবে:

//todo get product object $product 

$objectManager =\Magento\Framework\App\ObjectManager::getInstance();
$helperImport = $objectManager->get('\Magento\Catalog\Helper\Image');

$imageUrl = $helperImport->init($product, 'product_page_image_small')
                ->setImageFile($product->getSmallImage()) // image,small_image,thumbnail
                ->resize(380)
                ->getUrl();
echo $imageUrl;

6

আমি এইভাবেই করেছি। এটি বেশ দক্ষ এবং পরিষ্কার:

1) প্রথমে আপনাকে নিম্নলিখিত ক্লাসগুলি ইনজেক্ট করতে হবে:

protected $_storeManager;
protected $_appEmulation;
protected $_blockFactory;

public function __construct(
    ...
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Framework\View\Element\BlockFactory $blockFactory,
    \Magento\Store\Model\App\Emulation $appEmulation)
{
    $this->_storeManager = $storeManager;
    $this->_blockFactory = $blockFactory;
    $this->_appEmulation = $appEmulation;
}

2) তারপরে, নীচের কোড সহ একটি getImageUrl পদ্ধতি তৈরি করুন:

protected function getImageUrl($product, string $imageType = '')
{
    $storeId = $this->_storeManager->getStore()->getId();

    $this->_appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);

    $imageBlock =  $this->_blockFactory->createBlock('Magento\Catalog\Block\Product\ListProduct');
    $productImage = $imageBlock->getImage($product, $imageType);
    $imageUrl = $productImage->getImageUrl();

    $this->_appEmulation->stopEnvironmentEmulation();

    return $imageUrl;
}

দ্রষ্টব্য: আপনি যখন অ্যাডমিনের কাছ থেকে বা কোনও এপিআইয়ের জন্য এই কলটি করেন তখনই "অ্যাপ্লিকেশন" কোডটি প্রয়োজনীয় । অন্যথায়, আপনি নীচে ত্রুটি পাবেন (বা অনুরূপ):

Unable to resolve the source file for 'webapi_rest/_view/en_AU/Magento_Catalog/images/product/placeholder/.jpg'

3) পণ্য আইটেমটি এবং আপনার পছন্দসই চিত্রটি (আপনার ভিউ.এক্সএমএল ফাইলের উপর ভিত্তি করে ) পাস করার জন্য getImageUll কে কল করুন

...
$smallImage = $this->getImageUrl($productObject, 'product_page_image_small');
...

1

কাস্টম ইমেজ ইউআরএল পাওয়ার জন্য আমি এই কোডটি ব্যবহার করেছি। সুতরাং চিত্রটি যদি না বের হয় তবে এটি ডিফল্ট থিম চিত্রটি লোড করবে।

$product = $block->getProduct();

$productImageAttr = $product->getCustomAttribute('product_banner_image');

if ($productImageAttr && $productImageAttr->getValue() != 'no_selection') {

    $productImage = $this->helper('Magento\Catalog\Helper\Image')
    ->init($product, 'product_banner_image')
    ->setImageFile($productImageAttr->getValue());

    $imageUrl = $productImage->getUrl();

} else {

    $imageUrl = $this->getViewFileUrl('images/cat-img1.jpg'); // Theme/web/images

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