Bagaimana cara mendapatkan semua anak blok di kontroler Magento 2?

11

Saya harus membuat semua anak memblokir di controller menggunakan nama blok orang tua atau tata letak Magento 2.

Terima kasih sudah mahir.

Dharmendra Jadav
sumber

Jawaban:

7

Pastikan pengontrol Anda sama dengan yang memuat tata letak di mana blok Anda dan blok anaknya keluar.

gunakan Magento \ Backend \ App \ Action \ Context;
gunakan Magento \ Framework \ View \ Result \ PageFactory;

Edit kelas meluas \ Magento \ Backend \ App \ Action
{
  protected $ resultPageFactory;

  fungsi publik __construct (
       Konteks $ konteks,
       PageFactory $ resultPageFactory
  ) {
       $ this-> resultPageFactory = $ resultPageFactory;
       parent :: __ construct ($ context);
  }

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

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

  $ childBlocks = $ blockInstance-> getChildNames ();

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

}
Amit Singh
sumber
1
saras menyapa jawaban yang bagus.
Rakesh Jesadiya
Ini berfungsi dengan baik untuk saya. Terima kasih @ Amit Singh
Dharmendra Jadav
@AmitSingh, Tolong jelaskan, di $blockInstance->getChildNames();sini getChildNames () artinya?
Payal Patel
0

Anda bisa mendapatkan semua blok anak seperti ini.

$allblocks = $block->getChildNames();

  foreach($allblocks as $blocks){
    $child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
  }
Abhinav Singh
sumber
Saya telah mencoba semua fungsi yang digunakan untuk mendapatkan blok anak tetapi tidak berfungsi.
Dharmendra Jadav