Próbuję usunąć blok z określonej strony (czy to frontend, czy backend), ale tylko wtedy, gdy ustawiona jest pewna flaga konfiguracji true
.
Weźmy przykład.
Chcę usunąć blok o nazwie dashboard
z pulpitu administratora.
Blok jest zdefiniowany w adminhtml_dashboard_index.xml
pliku z Magento_Backend
modułu:
<referenceContainer name="content">
<block class="Magento\Backend\Block\Dashboard" name="dashboard"/>
</referenceContainer>
Dzięki odpowiedzi Adama mogę to zrobić wadminhtml_dashboard_index.xml
<body>
<referenceBlock name="dashboard" remove="true" />
</body>
Ale chcę go podnieść i usunąć ten blok tylko wtedy, gdy ustawienie konfiguracji ze ścieżką dashboard/settings/remove
ma wartość 1
.
Podejście XML do układu byłoby niesamowite, ale przyjmuję również podejście obserwatora.
helper
klasą, zobacz /programming/47237179/magento-2-i-want-to-add-ifconfig-in-override-block-xml?rq=1Odpowiedzi:
Nie mogłem też znaleźć sposobu, aby to zrobić za pomocą układu, ale oto przykład sposobu, w jaki można to zrobić za pomocą obserwatorów (pod warunkiem, że rozszerzają blok szablonu) ...
Utwórz plik events.xml w pliku etc / events.xml
Utwórz obserwatora
Zasadniczo _toHtml sprawdza, czy istnieje szablon. Jeśli nie, zwraca ''.
EDYTOWAĆ
Po dalszych kopaniach znalazłem sposób na zrobienie tego dalej.
A obserwator ...
źródło
Zwykle należy to zrobić za pomocą
<action />
tagu:EDYTOWAĆ :
Jedyny problem jest nierozwiązany Dziecko akceptuje tylko alias. Nie możesz użyć nazwy bloku.
Inne rozwiązanie: przepisz Magento Framework, aby móc używać ifconfig z remove = "true"
1- Utwórz własny moduł.
2- Dodaj nowy plik nadpisać Magento ramowej: (np
/Vendor/Module/Override/Magento/Framework/View/Layout/Reader/Block.php
)3- Dodaj plik di.xml, aby zastąpić plik magento:
4- Teraz możesz używać ifconfig w układzie w połączeniu z usuwaniem:
Ten przykład dotyczy Block, ale możesz zrobić to samo dla kontenera, jeśli przesłonisz metodę containerReference () w /Magento/Framework/View/Layout/Reader/Container.php
źródło
Z wytycznych technicznych :
Oto rozwiązanie wtyczki do tego:
Zadeklaruj wtyczkę:
Zdefiniuj wtyczkę:
Podobnie jak w odpowiedzi z Smartie próbowałem plugin dalej w górę łańcucha
\Magento\Framework\View\Layout\Builder::build
zafterBuild()
metody, ale doprowadzi to do nieskończonej rekurencji bo\Magento\Framework\View\Layout::getBlock
i\Magento\Framework\View\Layout::unsetElement
zarówno połączeń\Magento\Framework\View\Layout\Builder::build
ponownie.źródło
Atrybut „ifconfig” węzła „blok” w układzie umożliwia powiązanie bloku z wartością w konfiguracji sklepu.
Przetwarzanie „ifconfig” odbywa się w
\Magento\Framework\View\Layout\GeneratorPool::buildStructure
źródło