magento 2 comment appeler une fonction de blocage en phtml

32

Comment appeler une fonction de blocage dans un phtml? Par exemple, si je souhaite appeler ma fonction de blocage personnalisée dans product list.phtml?

Arshad M
la source

Réponses:

56

Essayez comme ça.

Par exemple, votre classe de bloc est

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

Dans n'importe quel fichier phtml, vous pouvez utiliser le code suivant pour obtenir la méthode de ce bloc.

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

J'espère que cela vous aide.

Ashish Madankar M2 Professiona
la source
travailler comme un charme, merci u
Hafiz Arslan
6

Si le modèle est lié au bloc, par exemple:

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

Et vous avez une méthode publique myMethod()définie dans Vendor\Module\Block\Namevous pouvez appeler ce qui suit dans name.phtml:

$block->myMethod();
Raphael au pianisme numérique
la source
@ Raphael est-ce $block->myMethod(); OU $this->myMethod(); ?
Ashish Madankar M2 Professiona
4
@AshishMadankar pour Magento 1 c'est $this->myMethod(), pour Magento 2 c'est$block->myMethod()
Raphael au Digital Pianism
@RaphaelatDigitalPianism Je souhaite appeler ma fonction de bloc personnalisée dans tout phtml. En gros, ma question est de savoir comment créer un objet $ myBlock pour l'un de mes blocs.
Arshad M
Vous devez affecter votre bloc au fichier template.phtml. Alors seulement vous pourrez appeler votre propre fonction en phtml.
Aman Srivastava
0

Placez votre fichier bloc dans le répertoire racine de votre module /Block/Your_block_file.php(remember à la première lettre majuscule de l'utilisateur pour le dossier et le fichier).

App / Code / Votre / Module / Bloc / Votre_blocage_fichier.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');
    }
}

Ensuite, liez votre fichier de blocage au modèle dans le fichier view / frontend / layout / your_file.xml que vous avez défini le fichier de blocage.

App / Code / Votre / Module / view / frontend / layout / votre_fichier.xml (si vous utilisez routes.xml, assurez-vous que le nom de votre fichier doit ressembler à, par exemple, 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>

Ensuite, définissez votre fichier de modèle dans App / Code / Votre / Module / view / frontend / templates / your_template.phtml.

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

C’est comment vous pouvez appeler des fonctions de blocage dans un fichier de modèle

Rakesh Kumar
la source