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 _blockFactorydan menyuntikkan instance dari \Magento\Framework\View\Element\BlockFactorydalam 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
_viewsudah ditinggalkan sekarang di controller dan akan segera pergi,
Untuk membuat instance sebuah blok, Anda harus menggunakan
\Magento\Framework\View\LayoutInterfacekelas 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.