মেজেন্টো 2-তে কোনও ব্লক কীভাবে ইনস্ট্যান্ট করবেন


10

ম্যাজেন্টো 1 এর মতো কোনও সহজ উপায় আছে:

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


4
একটি ব্লক এবং একটি মডেল দুটি ভিন্ন জিনিস। এটি কোনও সদৃশ নয়।
pspahn

রাজীব কে টম মডেল এবং ব্লক সম্পূর্ণভাবে diffrent হয়
theSeeker

উত্তর:


20

স্বীকৃত: ম্যাজেন্টো 2 আলফায় জবাব দেয়


আমি এটা যে সহজ ছিল ইচ্ছুক।
এটি নির্ভর করে আপনি এটি কোথা থেকে ইনস্ট্যান্ট করতে চান।
আপনি যদি অন্য একটি ব্লকের ভিতরে থেকে কোনও উদাহরণ তৈরি করতে চান তবে এটি করুন:

$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;
    ....
}

কোনও সহায়িকার ভিতরে থেকে কোনও ব্লক ইনস্ট্যান্ট করার জন্য এটি মডেলের মতোই কাজ করে


আরও সহজতর
মাতোয়েল

@ মারিয়াস $ টপলিংক = $ এটি-> getLayout () -> getBlock ('top.links') -> টুএইচটিএমএল (); ম্যাজেন্টো 1 তে ম্যাজেন্টো 2 use এর জন্য ব্যবহার করুন -> _ ভিউ-> getLayout () -> getBlock (ফুল \ ব্লক \ শ্রেণি \ নাম \ এখানে ') -> টুএইচটিএমএল (); এটি এই মারাত্মক ত্রুটির মতো ত্রুটি দেয়: কোনও অ-অবজেক্টে সদস্য ফাংশনে এইচটিএমএল () এ কল করুন কীভাবে আমি টুএইচটিএমএল () পেতে পারি?
এনডি 17

আপনি যদি কোনও নিয়ামকের মধ্যে থাকেন তবে আপনাকে এর জন্য কিছু ইনজেকশনের দরকার নেই _view। এটি ডিফল্টরূপে উপলভ্য হওয়া উচিত, যদিও আমি মনে করি এটি এখন হ্রাস পেয়েছে। আমি এই উত্তরটি 1.5 বছর আগে লিখেছি
মারিয়াস

1
@SachinS। আপনার আর এটি ব্যবহার করা উচিত নয়। _viewএখন নিয়ন্ত্রণকারীগুলিতে হ্রাস করা হয়েছে এবং এটি শীঘ্রই চলে যাবে
মারিয়াস

1
আমি কি এইভাবে পেজ ফ্যাক্টরি অবজেক্টটি ব্যবহার করে কল করতে পারি? $ viewPanelPageFactory = $ this-> resultPageFactory-> (তৈরি করুন); $ ভিউপ্যানেল = $ ভিউপ্যানেলপেজফ্যাক্টরি-> getLayout () -> গেটব্লক ('ক্যাটালগ.লেফটনাভ') -> টুএইচটিএমএল ();
সুশীলম

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()যেখানে আপনার প্রয়োজন সেখানে কল করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.