ฉันไม่สามารถใช้ชุดรูปแบบใหม่ในการติดตั้งที่สะอาด 2.2.4 2.2.5 ขึ้นไปไม่สามารถแก้ไขปัญหาได้
ฉันไม่สามารถใช้ชุดรูปแบบใหม่ในการติดตั้งที่สะอาด 2.2.4 2.2.5 ขึ้นไปไม่สามารถแก้ไขปัญหาได้
คำตอบ:
หมายเหตุ: นี่เป็นปัญหาที่ทราบใน Magento 2.2.4 ( ดูที่ปัญหา GitHub ) และการแก้ไขด้านล่างเป็นเพียงการแก้ไขชั่วคราว คุณไม่ควรเปลี่ยนไฟล์หลักของ Magento โดยตรง (แทนที่หรือสร้างปลั๊กอิน)
เปลี่ยนในMagento\Email\Model\AbstractTemplate.php
สิ่งนี้:
public function setForcedArea($templateId)
{
if ($this->area) {
throw new \LogicException(__('Area is already set'));
}
$this->area = $this->emailConfig->getTemplateArea($templateId);
return $this;
}
สำหรับสิ่งนี้:
public function setForcedArea($templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
ควรแก้ไขปัญหา
อัปเดต : สามารถแก้ไขได้โดยใช้โปรแกรมปรับปรุงนี้
สำหรับข้อผิดพลาดคงSomething went wrong while saving this configuration: Area is already set
ที่ในขณะที่บันทึกการกำหนดค่าชุดรูปแบบ คุณต้องการสร้างปลั๊กอินสำหรับแทนที่Magento\Email\Model\AbstractTemplate.php
ไฟล์ในโมดูลที่กำหนดเอง และปรับปรุงsetForcedArea()
ฟังก์ชั่น
เส้นทางของไฟล์: magento / app / code / Vendor / AreaConfigFix / registration.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_AreaConfigFix', __DIR__);
พา ธ ไฟล์: 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>
พา ธ ไฟล์: 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>
เส้นทางของไฟล์: magento / app / code / ผู้ขาย / AreaConfigFix / ปลั๊กอิน / อีเมล / รุ่น / 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;
}
}
แทนที่จะติดตั้งแพทช์ที่ได้รับจากวีโอไอพีหรือเปลี่ยนไฟล์หลักโดยตรงที่นี่เป็นวิธีที่ฉันทำ:
"เส้นทางไฟล์: magento / app / code / ผู้ขาย / ThemeErrorFix / registration.php"
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_ThemeErrorFix', __DIR__);
"เส้นทางไฟล์: magento / app / code / ผู้ขาย / 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>
"เส้นทางไฟล์: magento / app / code / ผู้ขาย / 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>
"เส้นทางไฟล์: magento / app / code / ผู้ขาย / ThemeErrorFix / รุ่น / 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;
}
}