Existe-t-il un moyen simple comme dans magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Existe-t-il un moyen simple comme dans magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Réponses:
VIEILLI: LA RÉPONSE SE RÉFÈRE À MAGENTO 2 ALPHA
Je souhaite que ce soit aussi simple que cela.
Cela dépend d'où vous voulez l'instancier.
Si vous souhaitez créer une instance à l'intérieur d'un autre bloc, faites-le comme ceci:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
De l'intérieur d'un contrôleur, procédez comme suit:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
De l'intérieur d'un modèle:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
mais ici, il y a un hic.
vous devez créer un membre protégé sur le modèle appelé _blockFactory
et injecter une instance de \Magento\Framework\View\Element\BlockFactory
dans le constructeur et l'affecter à ce membre var.
Quelque chose comme ça:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Pour instancier un bloc depuis l'intérieur d'un assistant, cela fonctionne de la même manière que pour le modèle
_view
. Il devrait être disponible par défaut, même si je pense qu'il est désormais obsolète. J'ai écrit cette réponse il y a 1,5 ans
_view
est désormais obsolète dans les contrôleurs et il disparaîtra bientôt,
Pour instancier un bloc, vous devez utiliser la
\Magento\Framework\View\LayoutInterface
classe et sa createBlock()
méthode.
Avec une classe d'assistance, vous pouvez le faire avec ce code:
namespace Vendor\Module\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
/**
* Layout
*
* @var \Magento\Framework\View\LayoutInterface
*/
protected $_layout;
/**
*
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\View\LayoutInterface $layout
) {
$this->_layout = $layout;
parent::__construct($context);
}
/**
* Create new block
*/
public function getBlock() {
$block = $this->_layout
->createBlock('Magento\Framework\View\Element\Template')
->setTemplate('Vendor_Module::helper/block.phtml');
return $block;
}
}
Appelez ensuite $helper->getBlock()
d'où vous avez besoin.