I want to load max 3 product images in the order history page on customer account.
I currently have a perfectly working code using $objectManager
. But because Magento does not recommend to use objectManager, I want to transform this into a module.
How can I transform this code into a module?
Code:
<?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($itm->getProductId());
$imageHelper = $objectManager->get('\Magento\Catalog\Helper\Image');
$image_url = $imageHelper->init($_product, 'product_page_image_small')->setImageFile($_product->getImage())->resize(160, 160)->getUrl();?>
EDIT:
namespace Vendor\OrderProductImage\Block\Item;
class Renderer extends \Magento\Framework\View\Element\Template
{
public function getProductCollectionWithImage(array $productIds)
{
$filter = $this->filterBuilder->setField('entity_id')
->setConditionType('in')
->setValue($productIds)
->create();
$searchCriteria = $this->searchCriteriaBuilder
->addFilters([$filter])
->create();
$result = $this->productRepository->getList($searchCriteria);
$parsedCollection = $this->collectionFactory->create();
if ($result->getTotalCount() > 0) {
foreach ($result->getItems() as $item) {
$item->setImage($this->buildImage($item));
$parsedCollection->addItem($item);
}
}
return $parsedCollection;
}
private function buildImage(\Magento\Catalog\Api\Data\ProductInterface $item)
{
return $this->imageBuilder->create($item, 'category_page_grid')->toHtml();
}
}
History.phtml
<?php foreach ($_orders as $_order) : ?>
<div class="order-row row align-items-center" onclick="window.location = '<?= $block->escapeUrl($block->getViewUrl($_order)) ?>'">
<div class="order-row-properties col-sm-3">
<a href="<?= $block->escapeUrl($block->getViewUrl($_order)) ?>">
<strong class="order-row-date"><?= $block->escapeHtml($_order->getRealOrderId()) ?> - <?= $block->formatDate($_order->getCreatedAt(), \IntlDateFormatter::LONG) ?></strong>
</a>
<p class="order-row-status"><?= $block->escapeHtml($_order->getStatusLabel()) ?></p>
</div>
<div class="order-row-list col-sm-8">
<ul class="">
<?php $items = $_order->getAllVisibleItems(); $item = array_slice($items, 0, 3); foreach($item as $itm): ?>
<?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($itm->getProductId());
$imageHelper = $objectManager->get('\Magento\Catalog\Helper\Image');
$image_url = $imageHelper->init($_product, 'product_page_image_small')->setImageFile($_product->getImage())->resize(160, 160)->getUrl();?>
<li class="order-row-item">
<div class="order-row-product">
<div class="order-row-product-image">
<img src="<?php echo $image_url;?>" border="0" alt="order-product-image" />
</div>
<div class="order-row-product-name">
<?php echo substr($this->escapeHtml($itm->getName()), 0, 20) ?>
</div>
</div>
</li>
<?php endforeach;?>
</ul>
</div>
<div class="order-row-icon col-sm-1">
<i class="fal fa-chevron-right"></i>
</div>
</div>
<?php endforeach; ?>