Щось пішло не так під час збереження цієї конфігурації: Площа вже встановлена


25

Я не в змозі застосувати нову тему в чистому встановленні 2.2.4. Перехід на 2.2.5 не усуває проблеми.


Ви можете, будь ласка, поділитися зі мною, що ви насправді зробили
hweb87

Привіт @SwapnilTatkondawar, Відповідно до ваших інструкцій, у мене є D / L патч ... але де я можу встановити його на свій IDE перед запуском зазначеної команди? Дякую,
rav narayan

Це не дає відповіді на запитання. Коли у вас буде достатня репутація, ви зможете коментувати будь-яку публікацію ; натомість надайте відповіді, які не потребують уточнення від запитувача . - З огляду
Сукумар Горай

Якщо я не можу задати існуючий питання, чи хотіли б ви створити дублікат?
рів нараян

Будь ласка, додайте коментар замість того, щоб додавати його як відповідь.
Сукумар Горай

Відповіді:


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). Застосуйте цей патч, використовуючи нижче командний патч -p1 <m2-hotfixes / EE-MAGETWO-93036-2018-07-02-07-07-16.patch. Після застосування згадки про патч і він працює чудово.
Swapnil Tatkondawar

2
Вирішено проблему в Magento2.2.6
Manish Maheshwari

1
Дякуємо за оновлення вашої відповіді за посиланням на файл виправлення :)
Jonathan Marzullo

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 / додаток / код / ​​постачальник / 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;
    }
}

не працює для мене
Манджунат

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.