Как получить все дочерние блоки в контроллере Magento 2?

11

Я должен получить все дочерние блоки в контроллере, используя имя родительского блока или макет Magento 2.

Заранее спасибо.

Дхармендра Джадав
источник

Ответы:

7

Убедитесь, что ваш контроллер такой же, который загружает макет, из которого выходит ваш блок и его дочерние блоки.

использовать 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);
  }

}
Амит Сингх
источник
1
Сарас без хорошего ответа.
Ракеш Джесадия
Это работает хорошо для меня Спасибо @ Амит Сингх
Dharmendra Jadav
@AmitSingh, пожалуйста, объясните, что $blockInstance->getChildNames();значит getChildNames ()?
Паял Патель
0

Вы можете получить все дочерние блоки, как это.

$allblocks = $block->getChildNames();

  foreach($allblocks as $blocks){
    $child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
  }
Абхинав Сингх
источник
Я перепробовал всю эту функцию, которая используется для получения дочерних блоков, но она не работает.
Дхармендра Джадав