C'è un modo semplice come in magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
C'è un modo semplice come in magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Risposte:
AGGIORNATO: RISPOSTA SI RIFERISCE A MAGENTO 2 ALPHA
Vorrei che fosse così facile.
Dipende da dove vuoi istanziarlo.
Se vuoi creare un'istanza dall'interno di un altro blocco, fallo in questo modo:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Dall'interno di un controller, procedere come segue:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Dall'interno di un modello:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
ma qui c'è un problema.
devi creare un membro protetto sul modello chiamato _blockFactory
e iniettare un'istanza di \Magento\Framework\View\Element\BlockFactory
nel costruttore e assegnarlo a quel membro var.
Qualcosa come questo:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Per creare un'istanza di un blocco dall'interno di un helper funziona come per il modello
_view
. Dovrebbe essere disponibile per impostazione predefinita, anche se penso che ora sia deprecato. Ho scritto questa risposta 1,5 anni fa
_view
è deprecato ora nei controller e presto scomparirà,
Per creare un'istanza di un blocco devi usare la
\Magento\Framework\View\LayoutInterface
classe e il suo createBlock()
metodo.
Con una classe helper potresti farlo con questo codice:
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;
}
}
Quindi chiama $helper->getBlock()
da dove ti serve.