Jak uzyskać wszystkie bloki podrzędne w kontrolerze Magento 2?

11

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ę.

Dharmendra Jadav
źródło

Odpowiedzi:

7

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);
  }

}
Amit Singh
źródło
1
Saras ma niezłą odpowiedź.
Rakesh Jesadiya
Działa dobrze dla mnie Thanks @ Amit Singh
Dharmendra Jadav
@AmitSingh, Proszę wyjaśnić, $blockInstance->getChildNames();tutaj getChildNames () oznacza?
Payal Patel,
0

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);
  }
Abhinav Singh
źródło
Próbowałem wszystkich funkcji, które są używane do uzyskania bloków potomnych, ale nie działa.
Dharmendra Jadav