ฉันจะเรียกใช้ฟังก์ชันบล็อกใด ๆ ใน phtml ใด ๆ ได้อย่างไร ตัวอย่างเช่นถ้าฉันต้องการเรียกใช้ฟังก์ชั่นบล็อกที่กำหนดเองของฉันในรายการ list.phtml
ฉันจะเรียกใช้ฟังก์ชันบล็อกใด ๆ ใน phtml ใด ๆ ได้อย่างไร ตัวอย่างเช่นถ้าฉันต้องการเรียกใช้ฟังก์ชั่นบล็อกที่กำหนดเองของฉันในรายการ list.phtml
คำตอบ:
ลองแบบนี้
สำหรับอดีตคลาสบล็อกของคุณคือ
<?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();
?>
หวังว่านี่จะช่วยคุณได้
หากเทมเพลตเชื่อมโยงกับบล็อกตัวอย่างเช่น:
<block class="Vendor\Module\Block\Name" name="name" template="Vendor_Module::name.phtml"/>
และคุณมีวิธีสาธารณะที่myMethod()
กำหนดไว้ในVendor\Module\Block\Name
คุณสามารถโทรต่อไปนี้ในname.phtml
:
$block->myMethod();
$block->myMethod();
หรือ $this->myMethod();
?
$this->myMethod()
สำหรับ Magento 2 มัน$block->myMethod()
วางไฟล์บล็อกของคุณในไดเรกทอรีรากของโมดูล /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(); ?>
นั่นคือวิธีที่คุณสามารถเรียกใช้ฟังก์ชั่นการบล็อกในไฟล์เทมเพลต