Я должен получить все дочерние блоки в контроллере, используя имя родительского блока или макет Magento 2.
Заранее спасибо.
Я должен получить все дочерние блоки в контроллере, используя имя родительского блока или макет Magento 2.
Заранее спасибо.
Ответы:
Убедитесь, что ваш контроллер такой же, который загружает макет, из которого выходит ваш блок и его дочерние блоки.
использовать Magento \ Backend \ App \ Action \ Context;
использовать Magento \ Framework \ View \ Result \ PageFactory;
Класс Edit extends \ Magento \ Backend \ App \ Action
{
защищенный $ resultPageFactory;
публичная функция __construct (
Context $ context,
PageFactory $ resultPageFactory
) {
$ this-> resultPageFactory = $ resultPageFactory;
Родитель :: __ конструкт ($ контекст);
}
$ 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();значит getChildNames ()?
Вы можете получить все дочерние блоки, как это.
$allblocks = $block->getChildNames();
foreach($allblocks as $blocks){
$child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
}