magento 2 phtml에서 블록 함수를 호출하는 방법


32

phtml에서 블록 함수를 어떻게 호출 할 수 있습니까? 예를 들어 product list.phtml에서 사용자 정의 차단 기능을 호출하려면?

답변:


56

이렇게 해보십시오.

예를 들어 블록 클래스는

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

그런 다음 모든 phtml 파일에서 다음 코드를 사용 하여이 블록의 메소드를 얻을 수 있습니다.

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

이것이 도움이되기를 바랍니다.


매력처럼 일하고, 감사합니다
Hafiz Arslan

6

템플릿이 블록에 연결된 경우 예를 들면 다음과 같습니다.

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

그리고 당신은 myMethod()정의 된 공개 메소드를 가지고 Vendor\Module\Block\Name있습니다 name.phtml:

$block->myMethod();

@ Raphael 아니면 $block->myMethod(); OR $this->myMethod(); 입니까?
Ashish Madankar M2 Professiona 2016

4
Magento 1의 경우 @AshishMadankar $this->myMethod(), Magento 2의 경우$block->myMethod()
디지털 피아니즘의 Raphael

@RaphaelatDigitalPianism phtml에서 내 맞춤 블록 함수를 호출하고 싶습니다. 기본적으로 내 질문은 내 블록 중 하나에 대해 $ myBlock 객체를 만드는 방법입니다.
Arshad M

레이아웃 파일에서 template.phtml에 블록을 할당해야합니다. 그런 다음 phtml에서 자신 만의 함수를 호출 할 수 있습니다.
Aman Srivastava 2016 년

0

블록 파일을 모듈 /Block/Your_block_file.php의 루트 디렉토리에 넣으십시오 (폴더 및 파일의 첫 번째 대문자를 기억하십시오).

앱 / 코드 / 사용자 / 모듈 / 블록 /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');
    }
}

그런 다음 블록 파일을 정의한 view / frontend / layout / your_file.xml 파일의 템플릿과 블록 파일을 연결하십시오.

App / Code / Your / Module / view / frontend / layout / your_file.xml (route.xml을 사용하는 경우 파일 이름이 예를 들어 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>

그런 다음 App / Code / Your / Module / view / frontend / templates / your_template.phtml에서 템플릿 파일을 정의하십시오.

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

템플릿 파일에서 Block 함수를 호출하는 방법

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.