magento 2如何在phtml中调用任何块函数


32

如何在任何phtml中调用任何块函数?例如,如果我想在产品list.phtml中调用我的自定义块函数?

Answers:


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(); OR $this->myMethod();吗?
Ashish Madankar M2 Professiona

4
@AshishMadankar代表Magento 1 $this->myMethod(),代表Magento 2$block->myMethod()
Raphael在Digital Pianism

@RaphaelatDigitalPianism我想在任何phtml中调用我的自定义块函数,基本上我的问题是如何为我的任何块创建$ myBlock对象。
Arshad M

您需要将您的块分配给布局文件中的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文件中将您的块文件与模板链接

应用/代码/您的/模块/视图/前端/布局/您的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>

然后在App / Code / Your / Module / view / frontend / templates / your_template.phtml中定义模板文件

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

这就是您可以在模板文件中调用Block函数的方式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.