.Phtml dosyasında yardımcı yöntem nasıl çağrılır


16

Magento 2'de bir şey geliştirmeye çalışıyorum. Ancak, bir Helper yöntemini (.phtml) dosyasında nasıl arayacağımı bulamadım.

Aşağıdaki kod yerine istiyorum:

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

Eğer kimse bilirse lütfen bana yardım et.


cevabımı denedin mi
chirag

Hey, Marius'un cevabını aşağıda kabul etmelisin.
seanbreeden

1
@seanbreeden Üzgünüm, oy kullandım ama kabul etmeyi unuttum.
Gaurav Agrawal

Yanıtlar:


30

Yardımcı çağrıları doğrudan şablonda kullanmamalısınız.
Yardımcı örneğinizin şablonu oluşturan bloğa bağımlı olmasını sağlayın ve bloğunuzda yardımcıyı çağıran ve bu yöntemi şablonda çağıran bir yöntem oluşturun.

Bloğunuzun şu şekilde tanımlanmasını sağlayın

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

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

Ardından şablonunuzda arama yapabilirsiniz $block->doSomething()


2
Bağımlılık tanımlamaksızın doğrudan şablonda yardımcı çağırırsak sorunun ne olacağını açıklayabilir misiniz
Prashant Valanda

bu iyi bir uygulama değil. Bildirilmemiş bir bağımlılık getirir. Bunu düzgün yapmak istiyorsanız, yalnızca şablonda yalnızca onu oluşturan bloktan yöntemleri çağırmalısınız.
Marius

2
Çekirdek magento geliştiricisi de doğrudan phtml dosyasında yardımcı çağırdı
Prashant Valanda

2
Bu doğru değil. Belki bu bölüm henüz yeniden düzenlenmemiştir
Marius

1
Kısa cevap: evet. Uzun cevap, 10 yöntemle bir yardımcıya sahip olmamalısınız ve hepsi aynı blok için gereklidir. Bu durumda, kodunuzu daha küçük bloklara ve şablonlara göre yeniden düzenlemeyi düşünmelisiniz.
Marius

24

Bunun gibi kullanmak zorundasınız:

$helper = $this->helper('{Vendor}\{Module}\Helper\Data');
$values = $helper->YourHelperMethod();

Evet, çalışmıyor. Aynı kodu daha önce de kullandım
Gaurav Agrawal

$ Bu artık şablon mantığında kullanımdan kaldırıldı
Dominic Xigen

7

Yardımcıya tüm sınıf adını aşağıdaki gibi yazmanız gerekir:

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

Yukarıdaki kodu kullanarak phtml dosyasında kullanabilirsiniz


bunun gibi m2 üzerinde çalışacak?
jafar pinjar

$ Bu artık şablon mantığında kullanımdan kaldırıldı
Dominic Xigen

2

Bu kodu modülümden birinde kullandım.

Saklama modülünü NameSpace (şirketinizin Adı) olarak değiştirin ReviewDating (Modülünüzün Adı) olarak değiştirin

İçinde /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();
    }

}

İçinde /var/www/html/magento2/app/code/Custommodule/ReviewRating/view/frontend/templates/homehorizontalwidget.phtml

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

İçinde /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);
    }

}

İçinde /var/www/html/magento2/app/code/Custommodule/ReviewRating/etc/adminhtml/system.xml

system configuration labels created here 

0

Bloğunuzda bu kodu deneyin:

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

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

Ve şablonunuzda şunları arayabilirsiniz:

$helper = $block->getHelper();
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.