Apakah ada cara sederhana seperti di magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Apakah ada cara sederhana seperti di magento1:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Jawaban:
LUAR BIASA: JAWABAN MENGUBAH KE MAGENTO 2 ALPHA
Saya berharap semudah itu.
Itu tergantung dari mana Anda ingin instantiate.
Jika Anda ingin membuat instance dari dalam blok lain lakukan seperti ini:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Dari dalam controller lakukan ini:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Dari dalam model:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
tapi di sini ada tangkapan.
Anda harus membuat anggota yang dilindungi pada model yang dipanggil _blockFactory
dan menyuntikkan instance dari \Magento\Framework\View\Element\BlockFactory
dalam konstruktor dan menugaskannya ke anggota itu var.
Sesuatu seperti ini:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Untuk instantiasi blok dari dalam helper, ia bekerja sama seperti untuk model
_view
. Itu harus tersedia secara default, meskipun saya pikir itu sudah usang sekarang. Saya menulis jawaban ini 1,5 tahun yang lalu
_view
sudah ditinggalkan sekarang di controller dan akan segera pergi,
Untuk membuat instance sebuah blok, Anda harus menggunakan
\Magento\Framework\View\LayoutInterface
kelas dan createBlock()
metodenya.
Dengan kelas pembantu Anda bisa melakukannya dengan kode ini:
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;
}
}
Kemudian telepon $helper->getBlock()
dari tempat yang Anda butuhkan.