Je ne parviens pas à appliquer un nouveau thème dans une nouvelle installation de 2.2.4. La mise à jour vers 2.2.5 ne résout pas le problème.
Je ne parviens pas à appliquer un nouveau thème dans une nouvelle installation de 2.2.4. La mise à jour vers 2.2.5 ne résout pas le problème.
Réponses:
Remarque: Il s'agit d'un problème connu dans Magento 2.2.4 ( voir problème GitHub ) et le correctif ci-dessous n'est qu'un correctif temporaire. Vous ne devez pas modifier directement le fichier principal de Magento (remplacer ou créer un plugin)
Changement dans Magento\Email\Model\AbstractTemplate.php
ceci:
public function setForcedArea($templateId)
{
if ($this->area) {
throw new \LogicException(__('Area is already set'));
}
$this->area = $this->emailConfig->getTemplateArea($templateId);
return $this;
}
Pour ça:
public function setForcedArea($templateId)
{
if (!isset($this->area)) {
$this->area = $this->emailConfig->getTemplateArea($templateId);
}
return $this;
}
Cela devrait résoudre le problème
Mise à jour : peut également être corrigée en appliquant ce patch
Pour une erreur fixe Something went wrong while saving this configuration: Area is already set
lors de l'enregistrement de la configuration du thème. Vous voulez créer un plugin pour remplacer le Magento\Email\Model\AbstractTemplate.php
fichier dans le module personnalisé. Et setForcedArea()
fonction de mise à jour .
Chemin du fichier: magento / app / code / Vendor / AreaConfigFix / registration.php
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_AreaConfigFix', __DIR__);
Chemin du fichier: 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>
Chemin du fichier: 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>
Chemin du fichier: 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;
}
}
Au lieu d'installer le patch fourni par magento ou de changer directement les fichiers de base, voici comment je l'ai fait:
"Chemin du fichier: magento / app / code / Vendor / ThemeErrorFix / registration.php"
<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_ThemeErrorFix', __DIR__);
"Chemin du fichier: 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>
"Chemin du fichier: 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>
"Chemin du fichier: magento / app / code / 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;
}
}