Coś poszło nie tak podczas zapisywania tej konfiguracji: Obszar jest już ustawiony

25

Nie mogę zastosować nowego motywu w czystej instalacji 2.2.4. Aktualizacja do wersji 2.2.5 nie rozwiązuje problemu.

Ankush Verma
źródło
może podzielić się ze mną tym, co właściwie zrobiłeś
hweb87
Witaj @ SwapnilTatkondawar, zgodnie z twoimi instrukcjami mam łatkę D / L ... ale gdzie mam ją zainstalować na swoim IDE przed uruchomieniem wspomnianego polecenia? Dziękuję,
rav narayan
To nie daje odpowiedzi na pytanie. Gdy zdobędziesz wystarczającą reputację , będziesz mógł komentować dowolny post ; zamiast tego podaj odpowiedzi, które nie wymagają wyjaśnienia od pytającego . - Z recenzji
Sukumar Gorai
Jeśli nie mogę zadać istniejącego pytania, czy chciałbyś, żebym utworzył duplikat?
rav narayan
Dodaj komentarz zamiast dodawać go jako odpowiedź.
Sukumar Gorai

Odpowiedzi:

53

Uwaga: Jest to znany problem w Magento 2.2.4 ( patrz problem GitHub ), a poniżej poprawka jest tylko poprawką tymczasową. Nie powinieneś bezpośrednio zmieniać pliku rdzenia Magento (przesłonić lub utworzyć wtyczkę)

Zmień Magento\Email\Model\AbstractTemplate.phpto:

public function setForcedArea($templateId)
{
    if ($this->area) {
        throw new \LogicException(__('Area is already set'));
    }
    $this->area = $this->emailConfig->getTemplateArea($templateId);
    return $this;
}

Dla tego:

public function setForcedArea($templateId)
{
    if (!isset($this->area)) {
        $this->area = $this->emailConfig->getTemplateArea($templateId);
    }
    return $this;
}

To powinno rozwiązać problem

Aktualizacja : można również naprawić, stosując tę poprawkę

Vishwas Bhatnagar
źródło
3
Dzięki! To rozwiązało mój problem. Aby powielić: W Treści> Projekt> Konfiguracja> „Edytuj” motyw na poziomie widoku sklepu. Jeśli dokonasz jakiejkolwiek zmiany (bez względu na zastosowanie motywu lub zmianę logo), pojawi się następujący komunikat: „Coś poszło nie tak podczas zapisywania tej konfiguracji: Obszar jest już ustawiony [wstrzymany]”.
eskaliert
3
Działa jak edytowałem w głównym pliku. Jak zastąpić ten konkretny plik modelu, aby nie edytować żadnego pliku podstawowego. Jakiej struktury folderów muszę używać w folderze aplikacji.
Alaksandar Jesus Gene
2
Niestety Magento 2 nie wydaje poprawek. Wydali jednak oficjalną łatkę tutaj: magento.com/tech-resources/download (szukaj MAGETWO-93036). Zastosuj tę poprawkę, używając poniższej łatki polecenia -p1 <m2-hotfixes / EE-MAGETWO-93036-2018-07-02-07-07-16.patch. Po zastosowaniu łaty wspomnienia i działa idealnie.
Swapnil Tatkondawar
2
Problem rozwiązany w Magento2.2.6
Manish Maheshwari,
1
Dziękujemy za aktualizację odpowiedzi z linkiem do pliku łaty :)
Jonathan Marzullo,
2

Naprawiono błąd Something went wrong while saving this configuration: Area is already setpodczas zapisywania konfiguracji motywu. Chcesz utworzyć wtyczkę do Magento\Email\Model\AbstractTemplate.phppliku zastępowania w niestandardowym module. I setForcedArea()funkcja aktualizacji .

Ścieżka pliku: magento / app / code / Vendor / AreaConfigFix / register.php

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

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

Ścieżka pliku: 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>

Ścieżka pliku: 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>

Ścieżka pliku: 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;
    }
}
Kirti Nariya
źródło
nie działa dla mnie
Manjunath
0

Zamiast instalować łatkę podaną przez magento lub bezpośrednio zmieniać podstawowe pliki, oto jak to zrobiłem:

„Ścieżka pliku: magento / app / code / Vendor / ThemeErrorFix / register.php”

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

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

„Ścieżka pliku: 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>

„Ścieżka pliku: 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>

„Ścieżka pliku: 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;
}
}
ishu
źródło