magento 2 jak wywołać dowolną funkcję bloku w phtml

32

Jak mogę wywołać dowolną funkcję bloku w dowolnym phtml? Na przykład, jeśli chcę wywołać moją niestandardową funkcję bloku w liście produktów.phtml?

Arshad M.
źródło

Odpowiedzi:

56

Spróbuj tak

Na przykład twoja klasa bloków to

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

następnie w dowolnym pliku phtml możesz użyć następującego kodu, aby uzyskać metodę tego bloku.

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

Mam nadzieję, że to ci pomoże.

Ashish Madankar M2 Professiona
źródło
działa jak urok, dziękuję
Hafiz Arslan
6

Jeśli szablon jest połączony z blokiem, na przykład:

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

I masz myMethod()zdefiniowaną metodę publiczną Vendor\Module\Block\Name, możesz wywołać następujące w name.phtml:

$block->myMethod();
Raphael at Digital Pianism
źródło
@ Raphael to $block->myMethod(); OR $this->myMethod(); ?
Ashish Madankar M2 Professiona
4
@AshishMadankar dla Magento 1 it $this->myMethod(), dla Magento 2 it$block->myMethod()
Raphael at Digital Pianism
@RaphaelatDigitalPianism Chcę wywołać moją niestandardową funkcję bloku w dowolnym phtml, w zasadzie moje pytanie brzmi, jak mogę utworzyć obiekt $ myBlock dla dowolnego mojego bloku.
Arshad M,
Musisz przypisać blok do pliku template.phtml w pliku układu. Tylko Ty możesz wywołać własną funkcję w phtml.
Aman Srivastava
0

Umieść plik bloku w katalogu głównym modułu /Block/Your_block_file.php(remember pierwszej użytkownika dużej litery dla folderu i pliku).

App / Code / Your / Module / Block / 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');
    }
}

Następnie połącz plik bloku z szablonem w pliku view / frontend / layout / your_file.xml, który zdefiniowałeś plik bloku

App / Code / Your / Module / view / frontend / layout / your_file.xml (jeśli używasz trasy.xml upewnij się, że nazwa twojego pliku musi być taka sama jak np. 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>

Następnie Zdefiniuj plik szablonu w App / Code / Your / Module / view / frontend / templates / your_template.phtml

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

Tak można wywoływać funkcje blokowania w pliku szablonu

Rakesh Kumar
źródło