วิธีการรับบล็อกเด็กทั้งหมดในตัวควบคุม Magento 2


11

ฉันต้องให้เด็ก ๆ บล็อคทั้งหมดในคอนโทรลเลอร์โดยใช้ชื่อบล็อกหลักหรือเลย์เอาต์ Magento 2

ขอบคุณล่วงหน้า.

คำตอบ:


7

ตรวจสอบให้แน่ใจว่าคอนโทรลเลอร์ของคุณเหมือนกันซึ่งโหลดโครงร่างที่บล็อกของคุณและบล็อกลูกออก

ใช้ Magento \ Backend \ App \ Action \ บริบท;
ใช้ Magento \ Framework \ View \ Result \ PageFactory;

การแก้ไขคลาสขยาย \ Magento \ Backend \ App \ Action
{
  ป้องกัน $ resultPageFactory;

  ฟังก์ชั่นสาธารณะ __ โครงสร้าง (
       บริบท $ บริบท
       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
saras amithsing คำตอบที่ดี
Rakesh Jesadiya

มันใช้งานได้ดีสำหรับฉันขอบคุณ @ 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);
  }

ฉันได้ลองฟังก์ชั่นทั้งหมดที่ใช้ในการรับบล็อกลูก แต่มันไม่ทำงาน
Dharmendra Jadav
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.