วิธีสร้างบล็อกใน magento2


10

มีวิธีง่าย ๆ ใน magento1:

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


4
บล็อกและโมเดลเป็นสองสิ่งที่แตกต่างกัน สิ่งนี้ไม่ซ้ำกัน
pspahn

โมเดลและบล็อกของ Rajeev K Tom นั้นแตกต่างกันโดยสิ้นเชิง
theSeeker

คำตอบ:


20

ล้าสมัย: คำตอบอ้างอิงถึง 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ในตัวสร้างและกำหนดให้กับสมาชิก var นั้น

บางสิ่งเช่นนี้

protected $_blockFactory;
public function __construct(
   ...,
   \Magento\Framework\View\Element\BlockFactory $blockFactory,
   ....
){
    ....
    $this->_blockFactory = $blockFactory;
    ....
}

สำหรับอินสแตนซ์บล็อกจากภายในตัวช่วยมันทำงานเหมือนกับรุ่น


ง่ายยิ่งดี
Matoeil

@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); ใช้ใน magento 1 สำหรับ magento 2 $ this -> _ view-> getLayout () -> getBlock (เต็ม \ Block \ Class \ ชื่อ \ ที่นี่ ') -> toHtml (); สิ่งนี้ทำให้เกิดข้อผิดพลาดเช่นข้อผิดพลาดร้ายแรงนี้: การเรียกฟังก์ชันสมาชิก toHtml () บนออบเจ็กต์ที่ไม่ใช่วัตถุฉันจะรับ toHtml () ได้อย่างไร
ND17

ถ้าคุณอยู่ในคอนโทรลเลอร์คุณไม่จำเป็นต้องฉีดอะไร_viewเลย โดยค่าเริ่มต้นควรจะใช้ได้แม้ว่าฉันคิดว่ามันเลิกใช้แล้ว ฉันเขียนคำตอบนี้เมื่อ 1.5 ปีก่อน
Marius

1
@SachinS คุณไม่ควรใช้สิ่งนั้นอีกต่อไป _viewเลิกใช้แล้วในคอนโทรลเลอร์และในไม่ช้ามันก็จะหายไป
Marius

1
ฉันสามารถโทรโดยใช้ออบเจกต์หน้าแบบนี้ได้หรือไม่ $ viewPanelPageFactory = $ this-> resultPageFactory-> สร้าง (); $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('catalog.leftnav') -> toHtml ();
Sushivam

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.