Imagen de producto incorrecta en el correo electrónico de pedido de ventas en modo de producción - Magento2.3.5

Aug 19 2020

Usamos el siguiente código para cargar la imagen del producto en el correo electrónico de la orden de venta. Esto funciona perfecto en modo desarrollador, pero cuando cambiamos a modo producción las imágenes no son correctas para los que no tienen ninguna imagen.

En ese caso, el producto que no tiene ninguna imagen, no se muestra el marcador de posición como cabría esperar, sino que se muestra la misma imagen del producto que el producto anterior.

El siguiente producto en línea que tiene alguna imagen, se muestra bien.

Ver:

¿Cómo podemos solucionar esto?

Modelo:/app/design/frontend/theme/theme/Magento_Sales/templates/email/items/invoice/default.phtml

CÓDIGO:

<?php $_item = $block->getItem()
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product_id = $_item->getProductId();
$product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_imagehelper = $objectManager->get('Magento\Catalog\Helper\Image');
$image_url = $_imagehelper->init($product, 'cart_page_product_thumbnail')->getUrl();?>

<img src="<?= $image_url;?>"

Respuestas

1 HerveTribouilloy Aug 22 2020 at 01:01

puede usar un ayudante como el siguiente:

<?php

namespace Mbs\OrderEmail\Helper;

use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;

class GetItemImage extends AbstractHelper
{
    /**
     * @var \Magento\Catalog\Block\Product\ImageBuilder
     */
    private $imageBuilder;

    public function __construct(
        Context $context,
        \Magento\Catalog\Block\Product\ImageBuilder $imageBuilder
    ) {
        parent::__construct($context);
        $this->imageBuilder = $imageBuilder;
    }

    public function getCartItemImage($item)
    {
        if ($item->getProduct() instanceof \Magento\Catalog\Model\Product) {
            return $this->imageBuilder->create($item->getProduct(), 'category_page_grid')->toHtml();
        }

        return '';
    }
}

entonces este ayudante deberá usarse en su plantilla de correo electrónico: la línea a continuación generará una imagen: la plantilla de correo electrónico predeterminada para el elemento en Magento es vendor/magento/module-sales/view/frontend/templates/email/items/order/default.phtml. Es posible que haya personalizado esta plantilla y, por lo tanto, deberá buscarla en la carpeta de su tema.

<?= $helper->getCartItemImage($_item) ?>