magento 2 como llamar a cualquier función de bloque en phtml

32

¿Cómo puedo llamar a cualquier función de bloque en cualquier phtml? Por ejemplo, si quiero llamar a mi función de bloqueo personalizada en la lista de productos.phtml?

Arshad M
fuente

Respuestas:

56

Intenta así.

Por ejemplo, tu clase de bloque es

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

luego, en cualquier archivo phtml, puede usar el siguiente código para obtener el método de este bloque.

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

Espero que esto te ayude.

Ashish Madankar M2 Professiona
fuente
trabajando como un encanto ,, gracias
Hafiz Arslan
6

Si la plantilla está vinculada al bloque, por ejemplo:

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

Y tiene un método público myMethod()definido en el Vendor\Module\Block\Nameque puede llamar a lo siguiente en name.phtml:

$block->myMethod();
Raphael en Digital Pianism
fuente
@ Raphael es $block->myMethod(); O $this->myMethod(); ?
Ashish Madankar M2 Professiona
44
@AshishMadankar para Magento 1 es $this->myMethod(), para Magento 2 es$block->myMethod()
Raphael en Digital Pianism
@RaphaelatDigitalPianism Quiero llamar a mi función de bloque personalizada en cualquier phtml, básicamente mi pregunta es cómo puedo crear el objeto $ myBlock para cualquiera de mis bloques.
Arshad M
Debe asignar su bloque a template.phtml en el archivo de diseño. Entonces solo usted puede llamar a su propia función en phtml.
Aman Srivastava
0

Coloque su archivo de bloque en el directorio raíz de su módulo /Block/Your_block_file.php (recuerde al usuario la primera letra mayúscula para la carpeta y el archivo).

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

Luego vincule su archivo de bloque con la plantilla en el archivo view / frontend / layout / your_file.xml que definió el archivo de bloque

App / Code / Your / Module / view / frontend / layout / your_file.xml (si está utilizando routes.xml, asegúrese de que el nombre de su archivo debe ser como, por ejemplo, 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>

Luego defina su archivo de plantilla en App / Code / Your / Module / view / frontend / templates / your_template.phtml

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

Así es como puedes llamar a las funciones de bloque en el archivo de plantilla

Rakesh Kumar
fuente