जवाबों:
प्रस्तुत: ANSWER REFERS TO MAGENTO 2 ALPHA
काश यह इतना आसान होता।
यह इस बात पर निर्भर करता है कि आप इसे कहाँ से इंस्टेंट करना चाहते हैं।
यदि आप किसी अन्य ब्लॉक के अंदर से एक उदाहरण बनाना चाहते हैं, तो इसे इस तरह से करें:
$this->getLayout()->createBlock('Full\Block\Class\Name\Here');
एक नियंत्रक के अंदर से ऐसा करें:
$this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');
एक मॉडल के अंदर से:
$this->_blockFactory->createBlock('Full\Block\Class\Name\Here');
लेकिन यहाँ एक पकड़ है।
आपको कॉल किए गए मॉडल पर एक संरक्षित सदस्य बनाना होगा _blockFactory
और \Magento\Framework\View\Element\BlockFactory
कंस्ट्रक्टर में एक इंस्टेंस को इंजेक्ट करना होगा और उसे उस सदस्य संस्करण में असाइन करना होगा।
कुछ इस तरह:
protected $_blockFactory;
public function __construct(
...,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
....
){
....
$this->_blockFactory = $blockFactory;
....
}
एक सहायक के अंदर से एक ब्लॉक को तुरंत चलाने के लिए यह मॉडल के लिए उसी तरह काम करता है
_view
। यह डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए, हालांकि मुझे लगता है कि अब यह पदावनत हो गया है। मैं इस सवाल का जवाब 1.5 साल पहले लिखा था
_view
अब नियंत्रकों में पदावनत कर दिया गया है और यह जल्द ही दूर हो जाएगा,
ब्लॉक को तुरंत करने के लिए आपको
\Magento\Framework\View\LayoutInterface
कक्षा और उसकी createBlock()
विधि का उपयोग करना होगा।
एक सहायक वर्ग के साथ आप इसे इस कोड के साथ कर सकते हैं:
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;
}
}
फिर $helper->getBlock()
जहां जरूरत हो वहां से कॉल करें ।