magento 2, как вызвать любую блочную функцию в phtml

32

Как я могу вызвать любую функцию блока в любом phtml? Например, если я хочу вызвать свою функцию пользовательского блока в product 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();
?>

Надеюсь, это поможет вам.

Ашиш Маданкар М2 Профессиона
источник
работает как очарование, спасибо
Хафиз Арслан
6

Если шаблон связан с блоком, например:

<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(); ?
Ашиш Маданкар M2 Professiona
4
@AshishMadankar для Magento 1 это $this->myMethod(), для Magento 2 это$block->myMethod()
Рафаэль на Цифровом пианизме
@RaphaelatDigitalPianism Я хочу вызвать свою функцию пользовательского блока в любом phtml, в основном мой вопрос заключается в том, как я могу создать объект $ myBlock для любого из моих блоков.
Аршад М
Вам необходимо назначить свой блок для template.phtml в файле макета. Только тогда вы можете вызывать свою собственную функцию в phtml.
Аман Шривастава
0

Поместите файл блока в корневую директорию вашего модуля /Block/Your_block_file.php (вспомните первую заглавную букву пользователя для папки и файла).

App / код / ​​Ваш / модуль / блок / 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');
    }
}

Затем свяжите свой файл блока с шаблоном в файле view / frontend / layout / your_file.xml, который вы определили файл блока

App / Code / Your / Module / view / frontend / layout / your_file.xml (если вы используете route.xml, убедитесь, что имя вашего файла должно быть таким же, как для ex. Frontname_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>

Затем определите файл шаблона в приложении / Код / Ваш / Модуль / Просмотр / Внешний интерфейс / Шаблоны / Ваш_template.phtml.

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

Вот как вы можете вызывать функции блокировки в файле шаблона.

Ракеш Кумар
источник