Gibt es einen einfachen Weg wie in magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Gibt es einen einfachen Weg wie in magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Antworten:
Veraltet: Antwort bezieht sich auf MAGENTO 2 ALPHA
Ich wünschte es wäre so leicht.
Dies hängt davon ab, von wo aus Sie es instanziieren möchten.
Wenn Sie eine Instanz aus einem anderen Block heraus erstellen möchten, gehen Sie folgendermaßen vor:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Gehen Sie in einem Controller folgendermaßen vor:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Aus dem Inneren eines Modells:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
aber hier gibt es einen Haken.
Sie müssen ein geschütztes Element für das aufgerufene Modell erstellen _blockFactory
, eine Instanz von \Magento\Framework\View\Element\BlockFactory
in den Konstruktor einfügen und es diesem Element var zuweisen.
Etwas wie das:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Das Instanziieren eines Blocks aus einem Helfer heraus funktioniert genauso wie beim Modell
_view
. Es sollte standardmäßig verfügbar sein, obwohl ich denke, dass es jetzt veraltet ist. Ich habe diese Antwort vor 1,5 Jahren geschrieben
_view
ist jetzt in Controllern veraltet und wird bald verschwinden,
Um einen Block zu instanziieren, müssen Sie die
\Magento\Framework\View\LayoutInterface
Klasse und ihre createBlock()
Methode verwenden.
Mit einer Hilfsklasse können Sie dies mit diesem Code tun:
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;
}
}
Dann rufen Sie $helper->getBlock()
an, wo Sie brauchen.