magento 2 como chamar qualquer função de bloco em phtml

32

Como posso chamar qualquer função de bloco em qualquer phtml? Por exemplo, se eu quiser chamar minha função de bloco personalizado no produto list.phtml?

Arshad M
fonte

Respostas:

56

Tente assim.

Por ex, sua classe de bloco é

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

em qualquer arquivo phtml, você pode usar o código a seguir para obter o método desse bloco.

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

Espero que isso ajude você.

Ashish Madankar M2 Professiona
fonte
trabalhando como um encanto ,, obrigado
Hafiz Arslan
6

Se o modelo estiver vinculado ao bloco, por exemplo:

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

E você tem um método público myMethod()definido, Vendor\Module\Block\Namepode chamar o seguinte em name.phtml:

$block->myMethod();
Raphael na Digital Pianism
fonte
@ Rafael é $block->myMethod(); OU $this->myMethod(); ?
Ashish Madankar M2 Professiona
4
@AshishMadankar for Magento 1 it's $this->myMethod(), for Magento 2 it's$block->myMethod()
Raphael no Digital Pianism
@RaphaelatDigitalPianism Eu quero chamar minha função de bloco personalizado em qualquer phtml, basicamente minha pergunta é como posso criar o objeto $ myBlock para qualquer um dos meus blocos.
Arshad M
Você precisa atribuir seu bloco ao template.phtml no arquivo de layout. Só então você pode chamar sua própria função em phtml.
Aman Srivastava
0

Coloque seu arquivo de bloco no diretório raiz do seu módulo /Block/Your_block_file.php(remember ao usuário primeira letra maiúscula para pasta e arquivo).

App / Código / Seu / Módulo / Bloco / Seu_block_arquivo.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');
    }
}

Em seguida, vincule seu arquivo de bloco ao modelo no arquivo view / frontend / layout / your_file.xml que você definiu

App / Code / Your / Module / view / frontend / layout / your_file.xml (se você estiver usando routes.xml, verifique se o nome do seu arquivo deve ser como, por exemplo, 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>

Em seguida, defina seu arquivo de modelo em App / Code / Your / Module / view / frontend / templates / your_template.phtml

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

É assim que você pode chamar as funções de Bloco no arquivo de modelo

Rakesh Kumar
fonte