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.

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

}}

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

Ich habe all diese Funktionen ausprobiert, die zum Abrufen von untergeordneten Blöcken verwendet werden, aber sie funktionieren nicht.
Dharmendra Jadav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.