magento 2 làm thế nào để gọi bất kỳ chức năng khối trong phtml


32

Làm thế nào tôi có thể gọi bất kỳ chức năng khối trong bất kỳ phtml? Ví dụ: nếu tôi muốn gọi chức năng chặn tùy chỉnh của mình trong danh sách sản phẩm.

Câu trả lời:


56

Hãy thử như thế này.

Đối với lớp cũ của bạn là

<?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>';
    }
}

sau đó trong bất kỳ tệp phtml nào, bạn có thể sử dụng mã sau đây để lấy phương thức của khối này.

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

Hy vọng điều này sẽ giúp bạn.


làm việc như một bùa mê ,, cảm ơn bạn
Hafiz Arslan

6

Nếu mẫu được liên kết với khối, ví dụ:

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

Và bạn có một phương thức công khai myMethod()được xác định trong Vendor\Module\Block\Namebạn có thể gọi như sau name.phtml:

$block->myMethod();

@ Raphael là $block->myMethod(); HAY $this->myMethod(); ?
Ashish Madankar M2 Professiona

4
@AshishMadankar cho Magento 1 $this->myMethod(), đối với Magento 2$block->myMethod()
Raphael tại Digital Pianism

@RaphaelatDigitalPianism Tôi muốn gọi hàm khối tùy chỉnh của mình trong bất kỳ phtml nào, về cơ bản câu hỏi của tôi là làm thế nào tôi có thể tạo đối tượng $ myBlock cho bất kỳ khối nào của mình.
Arshad M

Bạn cần gán khối của mình cho template.phtml trong tệp bố cục. Sau đó, chỉ có bạn có thể gọi chức năng của riêng bạn trong phtml.
Aman Srivastava

0

Đặt khối tệp của bạn vào thư mục gốc của mô-đun /Block/Your_block_file.php(remember để người dùng viết hoa chữ cái đầu tiên cho thư mục và tệp).

Ứng dụng / Mã / Của bạn / Mô-đun / Chặn / 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');
    }
}

Sau đó, liên kết tệp khối của bạn với mẫu trong tệp view / frontend / layout / your_file.xml mà bạn đã xác định tệp khối

Ứng dụng / Mã / Your / Module / view / frontend / layout / your_file.xml (nếu bạn đang sử dụng Routes, hãy đảm bảo tên tệp của bạn phải giống như ví dụ: frontname_controllFolder_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>

Sau đó, Xác định tệp mẫu của bạn trong Ứng dụng / Mã / Của bạn / Mô-đun / xem / frontend / samples / your_template.phtml

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

Đó là cách bạn có thể gọi các hàm Chặn trong tệp mẫu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.