Не работают переводы в письмах (оповещения о товарах) в Magento 2.4.4

Проблема: в письмах модуля ProductAlert не работают переводы, для товаров не подтягиваются картинки (вместо них url изображения товара заменяется на плейсхолдер)

Решение: проблема скрыта глубоко в механизме Magento, а именно то, как она загружает информацию о текущей зоне (area). Из нее в последующем будет вытаскиваться текущая тема, из темы переводы, а так же все связанные с ней слои (layouts).

Не смотря на то, что в самом модуле ProductAlerts storeId передается правильно при отправке письма, необходимая зона загружается неполностью.

\Magento\ProductAlert\Model\Email::send

$storeId = (int) $this->getStoreId() ?: (int) $this->_customer->getStoreId();
$store = $this->getStore($storeId);

$this->_appEmulation->startEnvironmentEmulation($storeId);

Чтобы исправить это, я написал before-плагин:

  1. app/code/<Vendor>/<Module>/Plugin/LoadAreaBeforeSendingEmailPlugin.php
  	<?php
	declare(strict_types=1);
	
	namespace <Vendor>\<Module>\Plugin;
	
	use Magento\Framework\App\AreaList;
	use Magento\ProductAlert\Model\Email;
	
	class LoadAreaBeforeSendingEmailPlugin
	{
	    public function __construct(
	        private AreaList $areaList
	    )
	    {
	    }
	
	    public function beforeSend(Email $subject): array
	    {
	        $area = $this->areaList->getArea(\Magento\Framework\App\Area::AREA_FRONTEND);
	        $area->load();
	        return [];
	    }
	}

2. app/code/<Vendor>/<Module>/etc/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="\Magento\ProductAlert\Model\Email">
        <plugin name="<Vendor>_<Module>::load_area_before_sending_email"
                type="<Vendor>\<Module>\Plugin\LoadAreaBeforeSendingEmailPlugin" />
    </type>
</config>

Он загружает всю зону целиком, после этого правильно загружается тема, слои и переводы

Связанные issue:

  1. https://github.com/magento/magento2/issues/37507
  2. https://github.com/magento/magento2/issues/35674
  3. https://github.com/magento/magento2/issues/23063

Абакумов Дмитрий

Веб-разработчик и увлеченный турист

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *