Magento1'de olduğu gibi basit bir yol var mı:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Magento1'de olduğu gibi basit bir yol var mı:
$crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');
Yanıtlar:
ESKİ: CEVAP MAGENTO 2 ALPHA'YI SEVİYOR
Keşke bu kadar kolay olsaydı.
Nereden başlatmak istediğinize bağlıdır.
Başka bir bloğun içinden bir örnek oluşturmak istiyorsanız bunu şu şekilde yapın:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
Bir denetleyicinin içinden bunu yapın:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
Bir modelin içinden:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
ama burada bir av var.
adlı modelde korumalı bir üye oluşturmanız _blockFactory
ve kurucuya bir örneğini enjekte \Magento\Framework\View\Element\BlockFactory
etmeniz ve bu üyeye atamanız gerekir.
Bunun gibi bir şey:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
Bir bloğun bir yardımcı içinden örneklenmesi için modeldeki ile aynı şekilde çalışır
_view
. Artık kullanımdan kaldırılmış olduğunu düşünüyorum, ancak varsayılan olarak kullanılabilir olmalıdır. Bu yanıtı 1.5 yıl önce yazdım
_view
şimdi kontrolörlerde kullanımdan kaldırıldı ve yakında gidecek,
Bir bloğu başlatmak için \Magento\Framework\View\LayoutInterface
sınıf ve createBlock()
yöntemini kullanmanız gerekir
.
Bir yardımcı sınıf ile bunu şu kodla yapabilirsiniz:
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;
}
}
Sonra $helper->getBlock()
ihtiyacınız olan yerden arayın .