कैसे .phtml फ़ाइल में सहायक विधि को कॉल करें


16

Magento में कुछ विकसित करने की कोशिश कर रहा है। 2. लेकिन, मुझे पता नहीं चला कि टेम्पलेट (.phtml) फ़ाइल में एक हेल्पर विधि को कैसे कॉल किया जाए।

मैं नीचे कोड का एक प्रतिस्थापन चाहते हैं:

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

अगर किसी को पता है तो कृपया मेरी मदद करें।


क्या आपने मेरा उत्तर आजमाया है?
चिराग

अरे, आपको नीचे मारियस का जवाब स्वीकार करना चाहिए।
सीनाबेडन

1
@seanbreeden क्षमा करें, मैंने मतदान किया है, लेकिन स्वीकार करना भूल गया।
गौरव अग्रवाल

जवाबों:


30

आपको टेम्पलेट में सीधे सहायक कॉल का उपयोग नहीं करना चाहिए।
अपने सहायक उदाहरण को उस ब्लॉक पर निर्भरता के रूप में प्रदान करें जो टेम्पलेट प्रदान करता है और आपके ब्लॉक में एक विधि बनाता है जो सहायक को कॉल करता है और टेम्पलेट में उस पद्धति को कॉल करता है।

क्या आपके ब्लॉक को इस तरह परिभाषित किया गया है

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

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

फिर आप अपने टेम्पलेट में कॉल कर सकते हैं $block->doSomething()


2
क्या आप यह बता सकते हैं कि अगर हम सीधे तौर पर निर्भरता को परिभाषित किए बिना टेम्पलेट में सहायक कहते हैं तो क्या समस्या होगी
प्रशांत वलंदा

यह एक अच्छा अभ्यास नहीं है। यह एक अघोषित निर्भरता का परिचय देता है। यदि आप इसे ठीक से करना चाहते हैं, तो आपको केवल उसी ब्लॉक से टेम्पलेट में कॉल करना चाहिए जो इसे रेंडर करता है।
मेरियस

2
कोर मैगनेटो डेवलपर ने phtml फ़ाइल में सीधे सहायक को भी कहा है
प्रशांत वलंदा

2
जो इसे सही नहीं बनाता है। हो सकता है कि हिस्सा अभी तक पुनर्संशोधित नहीं है
मेरियस

1
संक्षिप्त उत्तर: हाँ। लंबे उत्तर, आपके पास 10 तरीकों के साथ एक सहायक नहीं होना चाहिए और उन सभी को एक ही ब्लॉक के लिए आवश्यक है। यदि ऐसा होता है, तो आपको अपने कोड को छोटे ब्लॉक और टेम्प्लेट में बदलने के बारे में सोचना चाहिए।
मेरियस

24

आपको इस तरह का उपयोग करना होगा:

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

हां, इसका काम नहीं है। मैंने इससे पहले भी इसी कोड का इस्तेमाल किया है
गौरव अग्रवाल

$ यह अब टेम्प्लेट लॉजिक में
चित्रित किया गया है

7

आपको नीचे सहायक के रूप में पूरे वर्ग का नाम लिखना होगा:

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

उपरोक्त कोड का उपयोग करके आप इसे phtml फ़ाइल में उपयोग कर सकते हैं


इस तरह m2 पर काम करेंगे?
जफर पिंजर

$ यह अब टेम्प्लेट लॉजिक में
चित्रित किया गया है

2

मैंने अपने एक मॉड्यूल में इस कोड का उपयोग किया है।

Custommodule को NameSpace (आपकी कंपनी का नाम) में बदलें। समीक्षा करें (आपका मॉड्यूल नाम)

में /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();
    }

}

में /var/www/html/magento2/app/code/Custommodule/ReviewRating/view/frontend/templates/homehorizontalwidget.phtml

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

में /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);
    }

}

में /var/www/html/magento2/app/code/Custommodule/ReviewRating/etc/adminhtml/system.xml

system configuration labels created here 

0

इस कोड को अपने ब्लॉक में आज़माएं:

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

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

और आप टेम्पलेट में, आप कॉल कर सकते हैं:

$helper = $block->getHelper();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.