Tôi không thể áp dụng một chủ đề mới trong bản cài đặt sạch 2.2.4. Lên đến 2.2.5 không khắc phục được sự cố.
Tôi không thể áp dụng một chủ đề mới trong bản cài đặt sạch 2.2.4. Lên đến 2.2.5 không khắc phục được sự cố.
Câu trả lời:
Lưu ý: Đây là sự cố đã biết trong Magento 2.2.4 ( xem sự cố GitHub ) và cách khắc phục bên dưới chỉ là cách khắc phục tạm thời. Bạn không nên trực tiếp thay đổi tệp lõi Magento (ghi đè hoặc tạo plugin)
Thay đổi trong Magento\Email\Model\AbstractTemplate.php
này:
public function setForcedArea($templateId)
{
if ($this->area) {
throw new \LogicException(__('Area is already set'));
}
$this->area = $this->emailConfig->getTemplateArea($templateId);
return $this;
}
Đối với điều này:
public function setForcedArea($templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
Nó sẽ khắc phục vấn đề
Cập nhật : cũng có thể được sửa bằng cách áp dụng điều này vá
Đối với lỗi cố định Something went wrong while saving this configuration: Area is already set
trong khi lưu cấu hình chủ đề. Bạn muốn tạo plugin cho Magento\Email\Model\AbstractTemplate.php
tập tin ghi đè trong mô-đun tùy chỉnh. Và cập nhật setForcedArea()
chức năng.
Đường dẫn tệp: magento / app / code / Vendor / AreaConfigFix / register.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_AreaConfigFix', __DIR__);
Đường dẫn tệp: 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>
Đường dẫn tệp: 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>
Đường dẫn tệp: magento / app / code / 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;
}
}
Thay vì cài đặt bản vá được cung cấp bởi magento hoặc thay đổi các tệp cốt lõi trực tiếp ở đây là cách tôi đã làm:
"Đường dẫn tệp: magento / ứng dụng / mã / Nhà cung cấp / ThemeErrorFix / đăng ký.php"
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_ThemeErrorFix', __DIR__);
"Đường dẫn tệp: magento / app / code / 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>
"Đường dẫn tệp: magento / app / code / 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>
"Đường dẫn tệp: magento / ứng dụng / mã / Nhà cung cấp / 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;
}
}