Existe uma maneira simples como no magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Existe uma maneira simples como no magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Respostas:
ATUALIZADO: RESPOSTA Refere-se a MAGENTO 2 ALPHA
Eu queria que fosse assim tão fácil.
Depende de onde você deseja instanciar.
Se você deseja criar uma instância de dentro de outro bloco, faça o seguinte:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
De dentro de um controlador, faça o seguinte:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
De dentro de um modelo:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
mas aqui há um problema.
você deve criar um membro protegido no modelo chamado _blockFactory
e injetar uma instância \Magento\Framework\View\Element\BlockFactory
no construtor e atribuí-lo a esse membro var.
Algo assim:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Para instanciar um bloco de dentro de um auxiliar, ele funciona da mesma forma que no modelo
_view
. Ele deve estar disponível por padrão, embora eu ache que está obsoleto agora. Eu escrevi esta resposta há 1,5 anos
_view
está obsoleto agora em controladores e em breve desaparecerá,
Para instanciar um bloco, você precisa usar a
\Magento\Framework\View\LayoutInterface
classe e seu createBlock()
método.
Com uma classe auxiliar, você pode fazer isso com este código:
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;
}
}
Então ligue $helper->getBlock()
de onde você precisa.