Muszę uzyskać wszystkie bloki podrzędne w kontrolerze, używając nazwy bloku nadrzędnego lub układu Magento 2.
Z góry dziękuję.
Muszę uzyskać wszystkie bloki podrzędne w kontrolerze, używając nazwy bloku nadrzędnego lub układu Magento 2.
Z góry dziękuję.
Odpowiedzi:
Upewnij się, że kontroler jest taki sam, co ładuje układ, w którym wychodzi blok i jego bloki potomne.
użyj Magento \ Backend \ App \ Action \ Context;
użyj Magento \ Framework \ View \ Result \ PageFactory;
edycja klasy rozszerza \ Magento \ Backend \ App \ Action
{
chroniony $ resultPageFactory;
funkcja publiczna __construct (
Kontekst $ kontekst,
PageFactory $ resultPageFactory
) {
$ this-> resultPageFactory = $ resultPageFactory;
rodzic :: __ konstrukcja ($ kontekst);
}
$ resultPage = $ this-> resultPageFactory-> create ();
$ blockInstance = $ resultPage-> getLayout () -> getBlock ('your.block.name');
$ childBlocks = $ blockInstance-> getChildNames ();
foreach ($ childBlocks as $ blockName) {
$ block = $ resultPage-> getLayout () -> getBlock ($ blockName);
}
}
$blockInstance->getChildNames();tutaj getChildNames () oznacza?
Możesz uzyskać wszystkie bloki potomne w ten sposób.
$allblocks = $block->getChildNames();
foreach($allblocks as $blocks){
$child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
}