magento 2 phtml'de herhangi bir blok fonksiyonunun nasıl çağırılacağı


32

Herhangi bir phtml'de herhangi bir blok fonksiyonunu nasıl çağırabilirim? Örneğin, list.phtml ürünündeki özel blok fonksiyonumu çağırmak istersem?

Yanıtlar:


56

Böyle dene.

Örneğin, blok sınıfınız

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

daha sonra herhangi bir phtml dosyasında bu bloğun yöntemini almak için aşağıdaki kodu kullanabilirsiniz.

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

Umarım bu size yardımcı olur.


bir cazibe gibi çalışma, teşekkür ederim
Hafiz Arslan

6

Şablon bloğa bağlıysa, örneğin:

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

Ve eğer bir kamu yöntem var myMethod()tanımlanan Vendor\Module\Block\Namesize aşağıdaki çağırabilirsiniz name.phtml:

$block->myMethod();

Raphael @ olduğunu $block->myMethod(); YA $this->myMethod(); ?
Ashish Madankar M2 Professiona

4
Magento 1 için @AshishMadankar var $this->myMethod(), Magento 2 için$block->myMethod()
Digital Pianism'deki Raphael

@RaphaelatDigitalPianism Özel blok fonksiyonumu herhangi bir phtml içinde çağırmak istiyorum, temelde sorum bloğumdan herhangi biri için $ myBlock nesnesi nasıl oluşturabilirim.
Arshad M,

Bloğunuzu düzen dosyasındaki template.phtml dosyasına atamanız gerekir. Sonra sadece kendi işlevinizi phtml ile çağırabilirsiniz.
Aman Srivastava

0

Block File'ınızı /Block/Your_block_file.php(remember modülünüzün kök dizinine, kullanıcının klasör ve dosya için ilk büyük harfine yerleştirin).

Uygulama / Kod / Kişisel / Modül / Blok / 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');
    }
}

Sonra blok dosyanızı, blok dosyasını tanımladığınız view / frontend / layout / your_file.xml dosyasındaki şablona bağlayın

Uygulama / Kod / Sizin / Modül / görünüm / ön uç / düzen / your_file.xml (routes.xml kullanıyorsanız, dosyanızın adının ex. Frontname_controllerFolder_FileUnderControlerFolder.xml için olması gerektiği gibi olduğundan emin olun)

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

Ardından şablon dosyanızı App / Code / Your / Module / view / frontend / templates / your_template.phtml dosyasında tanımlayın.

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

Şablon dosyasında Blok işlevlerini bu şekilde arayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.