Saya tidak dapat menerapkan tema baru di instalasi 2.2.4 yang bersih. Naik ke 2.2.5 tidak memperbaiki masalah.
Saya tidak dapat menerapkan tema baru di instalasi 2.2.4 yang bersih. Naik ke 2.2.5 tidak memperbaiki masalah.
Jawaban:
Catatan: Ini adalah masalah yang diketahui di Magento 2.2.4 ( lihat masalah GitHub ) dan perbaikan di bawah ini hanyalah perbaikan temp. Anda tidak boleh secara langsung mengubah file inti Magento (menimpa atau membuat plugin)
Ubah Magento\Email\Model\AbstractTemplate.php
ini:
public function setForcedArea($templateId)
{
if ($this->area) {
throw new \LogicException(__('Area is already set'));
}
$this->area = $this->emailConfig->getTemplateArea($templateId);
return $this;
}
Untuk ini:
public function setForcedArea($templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
Seharusnya memperbaiki masalah
Pembaruan : juga dapat diperbaiki dengan menerapkan Patch ini
Untuk kesalahan tetap Something went wrong while saving this configuration: Area is already set
saat menyimpan konfigurasi tema. Anda ingin membuat plugin untuk mengganti Magento\Email\Model\AbstractTemplate.php
file dalam modul khusus. Dan setForcedArea()
fungsi pembaruan .
Jalur file: magento / app / kode / Vendor / AreaConfigFix / registrasi.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_AreaConfigFix', __DIR__);
Jalur file: magento / app / code / Vendor / AreaConfigFix / etc / module.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_AreaConfigFix" setup_version="1.0.0">
<sequence>
<module name="Magento_Email"/>
</sequence>
</module>
</config>
Jalur file: magento / app / code / Vendor / AreaConfigFix / etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Email\Model\AbstractTemplate">
<plugin name="email_setforced_area" type="Vendor\AreaConfigFix\Plugin\Email\Model\AbstractTemplate" />
</type>
</config>
Jalur file: magento / app / kode / Vendor / AreaConfigFix / Plugin / Email / Model / AbstractTemplate.php
<?php
namespace Vendor\AreaConfigFix\Plugin\Email\Model;
class AbstractTemplate
{
private $emailConfig;
public function __construct(\Magento\Email\Model\Template\Config $emailConfig)
{
$this->emailConfig = $emailConfig;
}
public function aroundSetForcedArea(\Magento\Email\Model\AbstractTemplate $subject, \Closure $proceed, $templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
}
Alih-alih menginstal tambalan yang diberikan oleh magento atau mengubah file inti secara langsung di sini adalah bagaimana saya melakukannya:
"Jalur file: magento / app / kode / Vendor / ThemeErrorFix / registration.php"
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_ThemeErrorFix', __DIR__);
"Jalur file: magento / app / kode / Vendor / ThemeErrorFix / etc / module.xml"
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_ThemeErrorFix" setup_version="1.0.0">
<sequence>
<module name="Magento_Email"/>
</sequence>
</module>
</config>
"Jalur file: magento / app / kode / Vendor / ThemeErrorFix / etc / di.xml"
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Email\Model\Template">
type="email_setforced_area" type="Vendor\ThemeErrorFix\Model\Template" />
</config>
"Jalur file: magento / app / kode / Vendor / ThemeErrorFix / Model / Template.php"
<?php
namespace Vendor\ThemeErrorFix\Model;
use Magento\Email\Model\Template as coreTemplate;
class Template extends coreTemplate
{
public function setForcedArea($templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
}