Wie bekomme ich alle Kinderblöcke in Controller Magento 2?

11

Ich muss alle untergeordneten Blöcke im Controller unter Verwendung des übergeordneten Blocknamens oder des Layouts Magento 2 blockieren.

Danke im Voraus.

Dharmendra Jadav
quelle

Antworten:

7

Stellen Sie sicher, dass Ihr Controller identisch ist, wodurch das Layout geladen wird, in dem Ihr Block und seine untergeordneten Blöcke beendet werden.

Verwenden Sie Magento \ Backend \ App \ Action \ Context.
Verwenden Sie Magento \ Framework \ View \ Result \ PageFactory.

Klasse Bearbeiten erweitert \ Magento \ Backend \ App \ Action
{
  protected $ resultPageFactory;

  öffentliche Funktion __construct (
       Kontext $ Kontext,
       PageFactory $ resultPageFactory
  ) {
       $ this-> resultPageFactory = $ resultPageFactory;
       parent :: __ Konstrukt ($ context);
  }}

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

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

  $ childBlocks = $ blockInstance-> getChildNames ();

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

}}
Amit Singh
quelle
1
saras amithsing nette antwort.
Rakesh Jesadiya
Es funktioniert gut für mich Danke @ Amit Singh
Dharmendra Jadav
@AmitSingh, bitte erklären Sie, $blockInstance->getChildNames();hier bedeutet getChildNames ()?
Payal Patel
0

Sie können alle untergeordneten Blöcke wie folgt erhalten.

$allblocks = $block->getChildNames();

  foreach($allblocks as $blocks){
    $child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
  }
Abhinav Singh
quelle
Ich habe all diese Funktionen ausprobiert, die zum Abrufen von untergeordneten Blöcken verwendet werden, aber sie funktionieren nicht.
Dharmendra Jadav