.Phtml ফাইলে কীভাবে হেল্পার পদ্ধতিতে কল করা যায়


16

ম্যাজেন্টো ২ তে কিছু বিকাশের চেষ্টা করছি তবে, টেমপ্লেটে (। PhtML) ফাইলে কোনও সহায়ক পদ্ধতি কল করতে কীভাবে খুঁজে পেলাম না।

আমি নীচের কোডটির একটি প্রতিস্থাপন চাই:

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

যদি কেউ জানে তবে আমাকে সাহায্য করুন।


তুমি কি আমার উত্তর চেষ্টা করেছ?
চিরাগ

আরে, আপনার নীচে মারিয়াসের উত্তর গ্রহণ করা উচিত।
সানব্রিডেন

1
@ স্যানব্রিডেন দুঃখিত, আমি ভোট দিয়েছি, তবে মেনে নিতে ভুলে গেছি।
গৌরব অগ্রওয়াল

উত্তর:


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
কোর ম্যাজেন্টো বিকাশকারীও পিএইচটিএমএল ফাইলটিতে সরাসরি হেল্পারকে ডেকেছেন
প্রশান্ত ভালানদা

2
এটি এটি সঠিক করে না। হতে পারে যে অংশটি এখনও রিফ্যাক্টর হয়নি
মারিয়াস

1
সংক্ষিপ্ত উত্তর: হ্যাঁ দীর্ঘ উত্তর, আপনার 10 টি পদ্ধতির সাহায্যকারী থাকা উচিত নয় এবং এগুলি সমস্ত একই ব্লকের জন্য প্রয়োজন। যদি এটি ঘটে থাকে তবে আপনার কোডটি ছোট ব্লক এবং টেম্পলেটগুলিতে পুনরায় ব্যবহার করার কথা ভাবেন।
মারিয়াস

24

আপনাকে এটির মতো ব্যবহার করতে হবে:

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

হ্যাঁ, এটি কাজ করে না। আমি আগেও একই কোড ব্যবহার করেছি
গৌরব অগ্রওয়াল

$ এটি এখন টেমপ্লেট যুক্তিতে নষ্ট করা হয়েছে
ডোমিনিক জিগেন

7

নীচে আপনার সহায়িকাতে পুরো শ্রেণীর নাম লিখতে হবে:

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

উপরের কোডটি ব্যবহার করে আপনি পিটিএইচটিএমএল ফাইলে এটি ব্যবহার করতে পারেন


এটি এম 2 তে কাজ করবে?
জাফর পিনজার

$ এটি এখন টেমপ্লেট যুক্তিতে নষ্ট করা হয়েছে
ডোমিনিক জিগেন

2

আমি আমার মডিউলের একটিতে এই কোডটি ব্যবহার করেছি।

কাস্টমমডিউলটি নেমস্পেসে পরিবর্তন করুন (আপনার কোম্পানির নাম) পর্যালোচনা পরিবর্তন করুন (আপনার মডিউল নাম)

ভিতরে /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();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.