Magento2 में एक ब्लॉक को तुरंत कैसे


10

वहाँ Magento1 के रूप में एक सरल तरीका है:

 $crumbs = Mage::app()->getLayout->getBlock('breadcrumbs');


4
एक ब्लॉक और एक मॉडल दो अलग-अलग चीजें हैं। यह कोई डुप्लिकेट नहीं है।
pspahn

राजीव के टॉम मॉडल और ब्लॉक पूरी तरह से अलग हैं
Seeker

जवाबों:


20

प्रस्तुत: 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;
    ....
}

एक सहायक के अंदर से एक ब्लॉक को तुरंत चलाने के लिए यह मॉडल के लिए उसी तरह काम करता है


बेहतर सरल
Matoeil

@ मार्स $ टोलिंक = $ इस-> गेटलैट () -> गेटब्लॉक ('टॉप.लिंक्स') -> टॉटल (); Magento 1 में प्रयोग करें magento 2 के लिए $ यह -> _ देखें-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here)) -> tottml (); यह इस घातक त्रुटि की तरह एक त्रुटि देता है: एक गैर-वस्तु पर एक सदस्य समारोह tohtml () को कॉल करें मैं कैसे tottml () प्राप्त कर सकता हूं?
ND17

यदि आप किसी कंट्रोलर में हैं, तो आपको कुछ भी इंजेक्ट करने की आवश्यकता नहीं है _view। यह डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए, हालांकि मुझे लगता है कि अब यह पदावनत हो गया है। मैं इस सवाल का जवाब 1.5 साल पहले लिखा था
मेरियस

1
@SachinS। आपको अब इसका उपयोग नहीं करना चाहिए। _viewअब नियंत्रकों में पदावनत कर दिया गया है और यह जल्द ही दूर हो जाएगा,
Marius

1
क्या मैं इस तरह से पेजफैक्टिव ऑब्जेक्ट का उपयोग करके कॉल कर सकता हूं? $ viewPanelPageFactory = $ this-> resultPageFactory-> (बनाने); $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('कैटलॉग.लेफ्टनव') -> tohtml ();
सुशीवम

13

ब्लॉक को तुरंत करने के लिए आपको \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()जहां जरूरत हो वहां से कॉल करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.