Як отримати всі дитячі блоки в контролері Magento 2?


Відповіді:


7

Переконайтесь, що ваш контролер однаковий, який завантажує макет, в якому ваш блок та його дочірні блоки виходять.

використовувати Magento \ Backend \ App \ Action \ Context;
використовувати Magento \ Framework \ View \ Result \ PageFactory;

клас редагування поширюється \ Magento \ Backend \ App \ Action
{
  захищений $ resultPageFactory;

  публічна функція __construct (
       Контекст $ контексту,
       PageFactory $ resultPageFactory
  ) {
       $ this-> resultPageFactory = $ resultPageFactory;
       батьківська :: __ конструкція ($ контекст);
  }

  $ resultPage = $ this-> resultPageFactory-> create ();

  $ blockInstance = $ resultPage-> getLayout () -> getBlock ('your.block.name');

  $ childBlocks = $ blockInstance-> getChildNames ();

  foreach ($ childBlocks як $ blockName) {
    $ block = $ resultPage-> getLayout () -> getBlock ($ blockName);
  }

}

1
Сарас amithsing приємна відповідь.
Ракеш Єсадія

Для мене це добре працює Дякую @ Amit Singh
Dharmendra Jadav

@AmitSingh, будь ласка, поясніть, $blockInstance->getChildNames();тут getChildNames () означає?
Payal Patel

0

Ви можете отримати всі такі дочірні блоки.

$allblocks = $block->getChildNames();

  foreach($allblocks as $blocks){
    $child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
  }

Я спробував всю функцію, яка використовується для отримання дочірніх блоків, але вона не працює.
Дхармендра Ядав
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.