Magento – Magento 2 – How to add product image in order confirmation email ( without object manager )

email-templatesmagento2order-email

Below code is working fine for me…

Step 1 : Before override Order confirmation email templates are genereted in below path root_folder/vendor/magento/module-sales/view/frontend/templates/email/items/order/defualt.phtml

    <?php
    /**
     * Copyright © Magento, Inc. All rights reserved.
     * See COPYING.txt for license details.
     */

    // @codingStandardsIgnoreFile

    /** @var $block \Magento\Sales\Block\Order\Email\Items\DefaultItems */

    /** @var $_item \Magento\Sales\Model\Order\Item */
    $_item = $block->getItem();
    $_order = $_item->getOrder();
    ?>
    <tr>
        <td class="item-info<?php if ($block->getItemOptions()): ?> has-extra<?php endif; ?>">
            <p class="product-name"><?= $block->escapeHtml($_item->getName()) ?></p>
            <p class="sku"><?= /* @escapeNotVerified */  __('SKU') ?>: <?= $block->escapeHtml($block->getSku($_item)) ?></p>
            <?php if ($block->getItemOptions()): ?>
                <dl class="item-options">
                <?php foreach ($block->getItemOptions() as $option): ?>
                    <dt><strong><em><?= /* @escapeNotVerified */  $option['label'] ?></em></strong></dt>
                    <dd>
                        <?= /* @escapeNotVerified */  nl2br($option['value']) ?>
                    </dd>
                <?php endforeach; ?>
                </dl>
            <?php endif; ?>
            <?php $addInfoBlock = $block->getProductAdditionalInformationBlock(); ?>
            <?php if ($addInfoBlock) :?>
                <?= $addInfoBlock->setItem($_item)->toHtml() ?>
            <?php endif; ?>
            <?= $block->escapeHtml($_item->getDescription()) ?>
        </td>
        <td class="item-qty"><?= /* @escapeNotVerified */  $_item->getQtyOrdered() * 1 ?></td>
        <td class="item-price">
            <?= /* @escapeNotVerified */  $block->getItemPrice($_item) ?>
        </td>
    </tr>
    <?php if ($_item->getGiftMessageId() && $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessage($_item->getGiftMessageId())):

Step 2 : After override, Override slaes modules under your theme folder like app/design/frontend/[vendor]/[template]/Magento_Sales/templates/email/items/order/defualt.phtml

    /** @var $block \Magento\Sales\Block\Order\Email\Items\DefaultItems */

    /** @var $_item \Magento\Sales\Model\Order\Item */
    $_item = $block->getItem();
    $_order = $_item->getOrder();
    /* add this line */
    $_store = $_order->getStore();
    ?>
    <tr>
        <td class="item-info<?php if ($block->getItemOptions()): ?> has-extra<?php endif; ?>">
       /* Start code for displaying product image */
          <?php
            // $_imageHelper = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Catalog\Helper\Image');
            // $_baseImageUrl = $_store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA).'catalog/product';

            $imageUrl = $this->helper('Magento\Catalog\Helper\Image')
            ->init($_item->getProduct(), 'product_base_image')
            ->constrainOnly(TRUE)
            ->keepAspectRatio(TRUE)
            ->keepTransparency(TRUE)
            ->keepFrame(FALSE)
            ->resize(150, 150)->getUrl();
            ?>
            <img src="<?php echo $imageUrl; ?>" alt="some" />
         /* end here  */

            <p class="product-name"><?= $block->escapeHtml($_item->getName()) ?></p>
            <p class="sku"><?= /* @escapeNotVerified */  __('SKU') ?>: <?= $block->escapeHtml($block->getSku($_item)) ?></p>
            <?php if ($block->getItemOptions()): ?>
                <dl class="item-options">
                <?php foreach ($block->getItemOptions() as $option): ?>
                    <dt><strong><em><?= /* @escapeNotVerified */  $option['label'] ?></em></strong></dt>
                    <dd>
                        <?= /* @escapeNotVerified */  nl2br($option['value']) ?>
                    </dd>
                <?php endforeach; ?>
                </dl>
            <?php endif; ?>
            <?php $addInfoBlock = $block->getProductAdditionalInformationBlock(); ?>
            <?php if ($addInfoBlock) :?>
                <?= $addInfoBlock->setItem($_item)->toHtml() ?>
            <?php endif; ?>
            <?= $block->escapeHtml($_item->getDescription()) ?>
        </td>
        <td class="item-qty"><?= /* @escapeNotVerified */  $_item->getQtyOrdered() * 1 ?></td>
        <td class="item-price">
            <?= /* @escapeNotVerified */  $block->getItemPrice($_item) ?>
        </td>
    </tr>
    <?php if ($_item->getGiftMessageId() && $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessage($_item->getGiftMessageId())):

Best Answer

1 .By Object Manager

$product_id = 1;//your product id here
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product       = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$store         = $objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore();
$imageUrl      = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . 'catalog/product' . $product->getImage();

hope it will help to get image adn just put it in

<img src="<?php echo $imageUrl ?>">

2 .By Dependency inj.

<?php


namespace Vendor\Module\Controller\Index;

class Index extends \Magento\Framework\App\Action\Action
{

    protected $resultPageFactory;

    /**
     * Constructor
     *
     * @param \Magento\Framework\App\Action\Context  $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
   \Magento\Catalog\Helper\Image $imageHelper,
    \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,        
    .........
    ) {

        $this->imageHelper = $imageHelper;
        $this->productRepository = $productRepository;
       ......
    }

    /**
     * Execute view action
     *
     * @return \Magento\Framework\Controller\ResultInterface
     */
    public function execute()
    {

          try {
                $_product = $this->productRepository->getById(2);//Product id here
            } catch (NoSuchEntityException $e) {
                return 'product not found';
            }
            $image_url = $this->imageHelper->init($_product, 'product_base_image')->getUrl();
            echo $image_url;

    }
}

.... stands for other dependency

if any help nedeed comment.

Related Topic