magento 2 วิธีการเรียกฟังก์ชั่นบล็อกใด ๆ ใน phtml


32

ฉันจะเรียกใช้ฟังก์ชันบล็อกใด ๆ ใน phtml ใด ๆ ได้อย่างไร ตัวอย่างเช่นถ้าฉันต้องการเรียกใช้ฟังก์ชั่นบล็อกที่กำหนดเองของฉันในรายการ list.phtml

คำตอบ:


56

ลองแบบนี้

สำหรับอดีตคลาสบล็อกของคุณคือ

<?php
namespace Company\Helloworld\Block;
use Magento\Framework\View\Element\Template;

class Main extends Template
{
    public function getMyCustomMethod()
    {
        return '<b>I Am From MyCustomMethod</b>';
    }
}

จากนั้นในไฟล์ phtml ใด ๆ ที่คุณสามารถใช้รหัสต่อไปนี้เพื่อรับวิธีการของบล็อกนี้

<?php
$blockObj= $block->getLayout()->createBlock('Company\Helloworld\Block\Main');
echo $blockObj->getMyCustomMethod();
?>

หวังว่านี่จะช่วยคุณได้


ทำงานเหมือนมีเสน่ห์ ,, ขอบคุณคุณ
Hafiz Arslan

6

หากเทมเพลตเชื่อมโยงกับบล็อกตัวอย่างเช่น:

<block class="Vendor\Module\Block\Name" name="name" template="Vendor_Module::name.phtml"/>

และคุณมีวิธีสาธารณะที่myMethod()กำหนดไว้ในVendor\Module\Block\Nameคุณสามารถโทรต่อไปนี้ในname.phtml:

$block->myMethod();

@ Raphael มันคือ$block->myMethod(); หรือ $this->myMethod(); ?
Ashish Madankar M2 Professiona

4
@AshishMadankar สำหรับ Magento 1 มัน$this->myMethod()สำหรับ Magento 2 มัน$block->myMethod()
Raphael at Digital Pianism

@RaphaelatDigitalPianism ฉันต้องการเรียกฟังก์ชั่นบล็อกที่กำหนดเองของฉันใน phtml ใด ๆ โดยทั่วไปคำถามของฉันคือฉันจะสร้าง $ myBlock วัตถุสำหรับบล็อกใด ๆ ของฉันได้อย่างไร
Arshad M

คุณต้องกำหนดบล็อกของคุณให้กับ template.phtml ในไฟล์เลย์เอาต์ จากนั้นมีเพียงคุณเท่านั้นที่สามารถเรียกใช้ฟังก์ชันของคุณเองใน phtml
Aman Srivastava

0

วางไฟล์บล็อกของคุณในไดเรกทอรีรากของโมดูล /Block/Your_block_file.php(remember ให้กับผู้ใช้ตัวพิมพ์ใหญ่ตัวแรกสำหรับโฟลเดอร์และไฟล์)

แอป / รหัส / คุณ / โมดูล / บล็อก / Your_block_file.php

 <?php

namespace Your\Module\Block;

class Your_block_file extends \Magento\Framework\View\Element\Template
{
    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Registry             $registry
     * @param \Magento\Framework\Data\FormFactory     $formFactory
     * @param array                                   $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Data\FormFactory $formFactory,
        array $data = []
    )
    {
        parent::__construct($context, $data);
    }

    /**
     * Get form action URL for POST booking request
     *
     * @return string
     */
    public function getFormAction()
    {
        die('Hello World');
    }
}

จากนั้นลิงก์ไฟล์บล็อกของคุณกับเทมเพลตในไฟล์มุมมอง / ส่วนหน้า / โครงร่าง / your_file.xml ที่คุณกำหนดไฟล์บล็อก

แอป / รหัส / ของคุณ / โมดูล / มุมมอง / ส่วนหน้า / โครงร่าง / your_file.xml (หากคุณใช้เส้นทาง.x.xตรวจสอบให้แน่ใจว่าชื่อไฟล์ของคุณต้องเหมือนเช่น front ._controllerFolder_FileUnderControlerFolder.xml)

    <?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <title>{Page Title</title>
    </head>
    <body>
        <referenceContainer name="content">
            <block class="Your/Module/Block/Your_block_file" name="gridpage.form" template="Your_Module:: your_template.phtml"/>
        </referenceContainer>
    </body>
</page>

จากนั้นกำหนดไฟล์เทมเพลตของคุณในแอพ / รหัส / โมดูลของคุณ / / ดู / ส่วนหน้า / แม่แบบ / your_template.phtml

<?= $block->getFormAction(); ?>

นั่นคือวิธีที่คุณสามารถเรียกใช้ฟังก์ชั่นการบล็อกในไฟล์เทมเพลต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.