Что-то пошло не так при сохранении этой конфигурации: область уже установлена


25

Я не могу применить новую тему в чистой установке 2.2.4. Обновление до 2.2.5 не решает проблему.


Пожалуйста, поделитесь со мной, что вы на самом деле сделали
hweb87

Здравствуйте @SwapnilTatkondawar, Согласно вашим инструкциям у меня есть D / L патч ... но где я могу установить его в моей IDE перед выполнением указанной команды? Спасибо,
Рав Нараян

Это не дает ответа на вопрос. Как только у вас будет достаточно репутации, вы сможете комментировать любой пост ; вместо этого предоставьте ответы, которые не требуют разъяснений от автора . - Из обзора
Сукумар Горай

Если я не могу задать существующий вопрос, вы хотите, чтобы я создал дубликат?
рав Нараян

Пожалуйста, добавьте комментарий вместо того, чтобы добавить его в качестве ответа.
Сукумар Горай

Ответы:


53

Примечание. Это известная проблема в 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;
}

Это должно решить проблему

Обновление : также можно исправить, применив этот патч


3
Благодарность! Это решило мою проблему. Воспроизвести: в разделе «Содержимое»> «Дизайн»> «Конфигурация»> «Изменить» тему на уровне представления магазина. Если вы вносите какие-либо изменения (независимо от того, применяете ли вы тему или меняете логотип), появляется следующее сообщение: «Что-то пошло не так при сохранении этой конфигурации: область уже установлена ​​[на удержании]».
eskaliert

3
Он работал так, как я редактировал в основном файле. Как переопределить этот конкретный файл модели, чтобы я не редактировал основной файл. Какую структуру папок мне нужно использовать в папке приложения.
Александр Иисус Джин

2
К сожалению, Magento 2 не выпускает исправления. Тем не менее, они выпустили официальный патч здесь: magento.com/tech-resources/download (поиск MAGETWO-93036). Примените этот патч с помощью следующей команды patch -p1 <m2-hotfixes / EE-MAGETWO-93036-2018-07-02-07-07-16.patch. После применения упомянутого патча и он работает отлично.
Свапнил Таткондавар

2
Проблема решена в Magento2.2.6
Маниш Махешвари

1
Спасибо за обновление вашего ответа со ссылкой на файл патча :)
Джонатан Марзулло

2

Для исправленной ошибки 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 / Vendor / AreaConfigFix / Plugin / электронная почта / модель / 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;
    }
}

не работает для меня
Манджунат

0

Вместо того, чтобы устанавливать патч, предоставленный magento, или напрямую менять файлы ядра, вот как я это сделал:

«Путь к файлу: magento / app / code / Vendor / ThemeErrorFix / registration.php»

<?php
use \Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_ThemeErrorFix', __DIR__);

«Путь к файлу: 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>

«Путь к файлу: 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>

«Путь к файлу: 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;
}
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.