So rufen Sie die Hilfsmethode in der .phtml-Datei auf

16

Ich habe versucht, etwas in Magento 2 zu entwickeln. Ich habe jedoch nicht herausgefunden, wie eine Helper-Methode in einer Template-Datei (.phtml) aufgerufen werden kann.

Ich möchte den folgenden Code ersetzen:

$this->helper('modulename/helpername')->methodname();

Wenn jemand weiß, bitte hilf mir.

Gaurav Agrawal
quelle
Hast du meine Antwort ausprobiert?
Chirag
Hey, du solltest Marius Antwort unten akzeptieren.
Seanbreeden
1
@seanbreeden Sorry, ich habe abgestimmt, aber vergessen zu akzeptieren.
Gaurav Agrawal

Antworten:

29

Sie sollten keine Hilfsaufrufe direkt in der Vorlage verwenden.
Stellen Sie Ihre Helferinstanz als Abhängigkeit zu dem Block bereit, der die Vorlage rendert, und erstellen Sie in Ihrem Block eine Methode, die den Helfer aufruft, und rufen Sie diese Methode in der Vorlage auf.

Lass deinen Block so definieren

protected $helperData;
public function __construct(
     ....
    \{Vendor}\{Module}\Helper\Data $helperData,
    ....
) {
    ....
    $this->helperData = $helperData;
    ....
}

public function doSomething()
{
    return $this->helperData->doSomething();
}

Dann können Sie Ihre Vorlage aufrufen $block->doSomething()

Marius
quelle
2
Können Sie bitte erklären, was das Problem sein würde, wenn wir den Helfer in der Vorlage direkt aufrufen, ohne dies in Abhängigkeit zu definieren
Prashant Valanda,
Es ist keine gute Übung. Es führt eine nicht deklarierte Abhängigkeit ein. Wenn Sie dies ordnungsgemäß ausführen möchten, sollten Sie in der Vorlage nur Methoden aus dem Block aufrufen, der sie rendert.
Marius
2
Core-Magento-Entwickler haben auch Helfer direkt in der HTML-Datei aufgerufen
Prashant Valanda
2
Das macht es nicht richtig. Vielleicht wird dieser Teil noch nicht überarbeitet
Marius
1
Kurze Antwort: ja. Lange Antwort, Sie sollten keinen Helfer mit 10 Methoden haben und alle werden für den gleichen Block benötigt. In diesem Fall sollten Sie überlegen, Ihren Code auf kleinere Blöcke und Vorlagen umzustellen.
Marius
24

Sie müssen wie folgt verwenden:

$helper = $this->helper('{Vendor}\{Module}\Helper\Data');
$values = $helper->YourHelperMethod();
Chirag
quelle
Ja, es funktioniert nicht. Ich habe auch den gleichen Code verwendet
Gaurav Agrawal
$ this ist jetzt in der Vorlagenlogik veraltet
Dominic Xigen
7

Sie müssen den ganzen Klassennamen wie folgt in helper schreiben:

$this->helper('vendorename\modulename\Helper\helpername')

Sie können es in der HTML-Datei mit dem obigen Code verwenden

Prashant Valanda
quelle
wie wird das auf m2 funktionieren?
Jafar Pinjar
$ this ist jetzt in der Vorlagenlogik veraltet
Dominic Xigen
2

Ich habe diesen Code in einem meiner Module verwendet.

Ändern Sie Custommodule in NameSpace (Name Ihres Unternehmens). Ändern Sie ReviewRating in (Name Ihres Moduls).

Im /var/www/html/magento2/app/code/Custommodule/ReviewRating/Block/HomehorizontalWidget.php

   <?php
namespace Custommodule\ReviewRating\Block;

class HomehorizontalWidget extends \Magento\Framework\View\Element\Template
{

protected $_helper;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    array $data = [],
    \Custommodule\ReviewRating\Helper\Data $helper
) {
    parent::__construct($context, $data);

    $this->_helper = $helper;
}

public function getEnable(){
        return $this->_helper->getEnable();
    }

}

Im /var/www/html/magento2/app/code/Custommodule/ReviewRating/view/frontend/templates/homehorizontalwidget.phtml

 <?php  echo $block->getEnable(); ?>

Im /var/www/html/magento2/app/code/Custommodule/ReviewRating/Helper/Data.php

<?php 
namespace Custommodule\ReviewRating\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper { 

    /** * @var \Magento\Framework\App\Config\ScopeConfigInterfac 
        */ 
    protected $_scopeConfig; 
    CONST ENABLE = 'reviewrating/general/enable_module'; 


    public function __construct( \Magento\Framework\App\Helper\Context $context, 
            \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) {

             parent::__construct($context); $this->_scopeConfig = $scopeConfig;
    }

    public function getEnable(){
        return $this->_scopeConfig->getValue(self::ENABLE);
    }

}

Im /var/www/html/magento2/app/code/Custommodule/ReviewRating/etc/adminhtml/system.xml

system configuration labels created here 
inrsaurabh
quelle
0

Versuchen Sie diesen Code in Ihrem Block:

protected $helperData;
public function __construct(
     ....
    \{Vendor}\{Module}\Helper\Data $helperData,
    ....
) {
    ....
    $this->helperData = $helperData;
    ....
}

public function getHelper()
{
    return $this->helperData;
}

Und in Ihrer Vorlage können Sie Folgendes aufrufen:

$helper = $block->getHelper();
Nero Phung
quelle