magento 2 come chiamare qualsiasi funzione di blocco in phtml


32

Come posso chiamare qualsiasi funzione di blocco in qualsiasi phtml? Ad esempio, se desidero chiamare la mia funzione di blocco personalizzata nell'elenco dei prodotti.phtml?

Risposte:


56

Prova così.

Per esempio la tua classe di blocco è

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

quindi in qualsiasi file phtml è possibile utilizzare il codice seguente per ottenere il metodo di questo blocco.

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

Spero che questo ti aiuti.


lavorare come un incanto ,, grazie
Hafiz Arslan il

6

Se il modello è collegato al blocco, ad esempio:

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

E hai un metodo pubblico myMethod()definito in Vendor\Module\Block\Namepuoi chiamare quanto segue in name.phtml:

$block->myMethod();

@ Raphael è $block->myMethod(); OR $this->myMethod(); ?
Ashish Madankar M2 Professiona,

4
@AshishMadankar per Magento 1 è $this->myMethod(), per Magento 2 è$block->myMethod()
Raffaello al Pianismo digitale il

@RaphaelatDigitalPianism Voglio chiamare la mia funzione di blocco personalizzata in qualsiasi phtml, in sostanza la mia domanda è: come posso creare l'oggetto $ myBlock per qualsiasi mio blocco.
Arshad M,

È necessario assegnare il blocco a template.phtml nel file di layout. Quindi solo tu puoi chiamare la tua funzione in phtml.
Aman Srivastava,

0

Posiziona il tuo file di blocco nella directory principale del modulo /Block/Your_block_file.php( ricordare alla prima lettera maiuscola dell'utente per cartella e file).

App / Codice / Your / modulo / blocco / 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');
    }
}

Quindi collegare il file di blocco con il modello nel file view / frontend / layout / your_file.xml che è stato definito il file di blocco

App / Code / Your / Module / view / frontend / layout / your_file.xml (se stai usando route.xml assicurati che il nome del tuo file sia simile a es. 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>

Quindi definire il file del modello in App / Codice / Your / Module / view / frontend / templates / your_template.phtml

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

Ecco come è possibile chiamare le funzioni di blocco nel file modello

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.