¿Cómo obtener todos los bloques secundarios en el controlador Magento 2?

11

Tengo que hacer que todos los niños bloqueen en el controlador usando el nombre del bloque principal o el diseño Magento 2.

Gracias de antemano.

Dharmendra Jadav
fuente

Respuestas:

7

Asegúrese de que su controlador sea el mismo que carga el diseño en el que sale su bloque y sus bloques secundarios.

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

clase Editar se extiende \ Magento \ Backend \ App \ Action
{
  protegido $ resultPageFactory;

  función pública __construct (
       Contexto $ context,
       PageFactory $ resultPageFactory
  ) {
       $ this-> resultPageFactory = $ resultPageFactory;
       parent :: __ construct ($ context);
  }

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

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

  $ childBlocks = $ blockInstance-> getChildNames ();

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

}
Amit Singh
fuente
1
saras amithsing buena respuesta.
Rakesh Jesadiya
Funciona bien para mí Gracias @ Amit Singh
Dharmendra Jadav
@AmitSingh, explique, ¿ $blockInstance->getChildNames();aquí getChildNames () significa?
Payal Patel
0

Puede obtener todos los bloques secundarios como este.

$allblocks = $block->getChildNames();

  foreach($allblocks as $blocks){
    $child_block = $this->resultPageFactory->create()->getLayout()->getBlock($blocks);
  }
Abhinav Singh
fuente
He intentado toda esa función que se usa para obtener bloques secundarios pero no funciona.
Dharmendra Jadav