як викликати будь-яку функцію блоку у phtml


32

Як я можу викликати будь-яку функцію блоку в будь-якому phtml? Наприклад, якщо я хочу викликати свою власну функцію блоку у списку продуктів.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();
?>

Сподіваюся, це вам допоможе.


працює як шарм ,, дякую u
Хафіз Арслан

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(); ?
Ashish Madankar M2 Professiona

4
@AshishMadankar для Magento 1 це $this->myMethod(), для Magento 2 це$block->myMethod()
Рафаель у Digital Pianism

@RaphaelatDigitalPianism Я хочу викликати власну функцію блоку в будь-якому phtml, в основному моє питання полягає в тому, як я можу створити $ myBlock об'єкт для будь-якого з мого блоку.
Аршад М

Потрібно призначити свій блок template.phtml у файлі макета. Тоді лише ви можете викликати власну функцію в phtml.
Аман Срівастава

0

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

Додаток / Код / Ваш / Модуль / Блок / 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 / Ваш / Модуль / view / frontend / layout / your_file.xml (якщо ви використовуєте route.xml, переконайтесь, що ім'я файлу має бути таким, як, наприклад, 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>

Потім визначте файл шаблону в App / Code / Your / Module / view / frontend / templates / your_template.phtml

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

Ось як можна викликати функції блоку у файлі шаблону

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.