magento 2 wie man eine block funktion in phtml aufruft

32

Wie kann ich eine Blockfunktion in einem beliebigen HTML aufrufen? Zum Beispiel, wenn ich meine benutzerdefinierte Blockfunktion in product list.phtml aufrufen möchte?

Arshad M
quelle

Antworten:

56

Versuchen Sie es so.

Zum Beispiel ist Ihre Blockklasse

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

Dann können Sie in jeder HTML-Datei den folgenden Code verwenden, um die Methode dieses Blocks abzurufen.

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

Hoffe das hilft dir.

Ashish Madankar M2 Professiona
quelle
Arbeiten wie ein Zauber, danke
Hafiz Arslan
6

Wenn die Vorlage mit dem Block verknüpft ist, zum Beispiel:

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

Und Sie haben eine öffentliche Methode myMethod()definiert, in der Vendor\Module\Block\NameSie Folgendes aufrufen können name.phtml:

$block->myMethod();
Raphael bei Digital Pianism
quelle
@ Raphael ist es $block->myMethod(); ODER $this->myMethod(); ?
Ashish Madankar M2 Professiona
4
@AshishMadankar für Magento 1 ist es $this->myMethod(), für Magento 2 ist es$block->myMethod()
Raphael bei Digital Pianism
@RaphaelatDigitalPianism Ich möchte meine benutzerdefinierte Blockfunktion in einem beliebigen HTML-Code aufrufen. Grundsätzlich ist meine Frage, wie ich ein $ myBlock-Objekt für einen beliebigen Block erstellen kann.
Arshad M
Sie müssen Ihren Block der template.phtml in der Layoutdatei zuweisen. Dann können nur Sie Ihre eigene Funktion in phtml aufrufen.
Aman Srivastava
0

Platzieren Sie Ihre Blockdatei im Stammverzeichnis Ihres Moduls /Block/Ihre_Blockdatei.php (merken Sie sich den ersten Großbuchstaben des Benutzers für Ordner und Datei).

App / Code / Ihr / Modul / 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');
    }
}

Verknüpfen Sie dann Ihre Blockdatei mit der Vorlage in der Datei view / frontend / layout / your_file.xml, die Sie als Blockdatei definiert haben

App / Code / Your / Module / view / frontend / layout / your_file.xml (Wenn Sie routes.xml verwenden, stellen Sie sicher, dass der Name Ihrer Datei wie zum Beispiel frontname_controllerFolder_FileUnderControlerFolder.xml sein muss.)

    <?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>

Definieren Sie dann Ihre Vorlagendatei in App / Code / Your / Module / view / frontend / templates / your_template.phtml

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

So können Sie Blockfunktionen in einer Vorlagendatei aufrufen

Rakesh Kumar
quelle