コントローラMagento 2のすべての子ブロックを取得するにはどうすればよいですか?


回答:


7

ブロックとその子ブロックが存在するレイアウトをロードするコントローラーが同じであることを確認してください。

Magento \ Backend \ App \ Action \ Contextを使用します。
Magento \ Framework \ View \ Result \ PageFactoryを使用します。

Editクラスは\ Magento \ Backend \ App \ Actionを拡張します
{
  保護された$ resultPageFactory;

  パブリック関数__construct(
       コンテキスト$ context、
       PageFactory $ resultPageFactory
  ){
       $ this-> resultPageFactory = $ resultPageFactory;
       親:: __ construct($ context);
  }

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

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

  $ childBlocks = $ blockInstance-> getChildNames();

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

}

1
サラスはいい答えを考えています。
Rakesh Jesadiya

それは私のためにうまく
いき

@AmitSingh、説明してください、$blockInstance->getChildNames();ここでgetChildNames()はどういう意味ですか?
Payal Patel 2018

0

このようなすべての子ブロックを取得できます。

$allblocks = $block->getChildNames();

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

子ブロックを取得するために使用されるすべての機能を試しましたが、機能しません。
Dharmendra Jadav
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.