Trong bài viết này tôi sẽ hướng dẫn các bạn cách để get product image url trong Magento 2.
1. Get product image url trong block
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?<em>php </em>namespace Vendor\Extension\Block; use Magento\Framework\View\Element\Template; use Magento\Catalog\Helper\Image; use Magento\Catalog\Model\ProductFactory; use Magento\Framework\View\Element\Template\Context; class Extension extends Template { protected $imageHelper; protected $productFactory; public function __construct(Image $imageHelper, ProductFactory $productFactory, Context,) { $this->imageHelper = $imageHelper; $this->productFactory = $productFactory; } public function getProductImageUrl($id) { try { $product = $this->productFactory->create->load($id); } catch (NoSuchEntityException $e) { return 'Data not found'; } $url = $this->imageHelper->init($product, 'product_thumbnail_image')->getUrl(); return $url; } } |
2. Get product image url trực tiếp trong template
1 |
$this-><strong>helper</strong>(' Magento\Catalog\Helper\Image')->init($product, 'product_thumbnail_image')->getUrl(); |
3. Get default Placeholder image url
Placeholder image được sử dụng khi các hình ảnh đang sử dụng bị lỗi hoặc không tìm thấy. Lúc đó bạn có thể xử lý để lấy ảnh mặc định khi cần thiết.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php namespace ViMagento\HelloWorld\Block; <em>/** * Class Placeholder * </em><strong><em>@package </em></strong><em>ViMagento\HelloWorld\Block */ </em>class Placeholder extends \Magento\Framework\View\Element\Template { <em>/** * </em><strong><em>@var </em></strong><em>\Magento\Framework\View\Asset\Repository */ </em>protected $assetRepository; <em>/** * </em><strong><em>@var </em></strong><em>\Magento\Catalog\Helper\ImageFactory */ </em>protected $helperImageFactory; <em>/** * Placeholder constructor. * </em><strong><em>@param </em></strong><em>\Magento\Framework\View\Element\Template\Context $context * </em><strong><em>@param </em></strong><em>\Magento\Framework\View\Asset\Repository $assetRepository * </em><strong><em>@param </em></strong><em>\Magento\Catalog\Helper\ImageFactory $helperImageFactory * </em><strong><em>@param </em></strong><em>array $data */ </em>public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\View\Asset\Repository $assetRepository, \Magento\Catalog\Helper\ImageFactory $helperImageFactory, array $data = [] ) { $this->assetRepository = $assetRepository; $this->helperImageFactory = $helperImageFactory; parent::<em>__construct</em>($context, $data); } <em>/** * </em><strong><em>@return </em></strong><em>mixed */ </em>public function getPlaceHolderImage() { $imagePlaceholder = $this->helperImageFactory->create(); return $this->assetRepository->getUrl($imagePlaceholder->getPlaceholder('small_image')); } } |
Sau đó trong template phtml bạn có thể get placeholder image url bằng cách gọi đến hàm bên trên:
1 2 3 4 |
<?php $placeholderUrl = $block->getPlaceHolderImage(); ?> <img src="<?php echo $placeholderUrl; ?>" alt="placeholder" /> |