Có cách nào đơn giản như trong magento1 không:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Có cách nào đơn giản như trong magento1 không:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Câu trả lời:
NGOÀI RA: TRẢ LỜI CÂU TRẢ LỜI CHO MAGENTO 2 ALPHA
Tôi ước rằng nó thật dễ dàng.
Nó phụ thuộc vào nơi bạn muốn khởi tạo nó từ.
Nếu bạn muốn tạo một cá thể từ bên trong một khối khác, hãy làm như thế này:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Từ bên trong bộ điều khiển làm điều này:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Từ bên trong một mô hình:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
nhưng ở đây có một cái bẫy
bạn phải tạo một thành viên được bảo vệ trên mô hình được gọi là_blockFactory
và thêm một thể hiện của \Magento\Framework\View\Element\BlockFactory
hàm tạo và gán nó cho var thành viên đó.
Một cái gì đó như thế này:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Để khởi tạo một khối từ bên trong một trình trợ giúp, nó hoạt động tương tự như đối với mô hình
_view
. Nó nên có sẵn theo mặc định, mặc dù tôi nghĩ rằng nó không dùng nữa. Tôi đã viết câu trả lời này 1,5 năm trước
_view
bây giờ không được dùng nữa trong bộ điều khiển và nó sẽ sớm biến mất,
Để khởi tạo một khối bạn phải sử dụng
\Magento\Framework\View\LayoutInterface
lớp và createBlock()
phương thức của nó .
Với một lớp trợ giúp bạn có thể làm điều đó với mã này:
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;
}
}
Sau đó gọi $helper->getBlock()
từ nơi bạn cần.