ম্যাজেন্টোতে সাহায্যকারী কী?
কোন কোন ক্ষেত্রে সাহায্যকারী ব্যবহার করা উচিত নয়?
ম্যাজেন্টোতে সাহায্যকারী কী?
কোন কোন ক্ষেত্রে সাহায্যকারী ব্যবহার করা উচিত নয়?
উত্তর:
তাত্ত্বিকভাবে আপনার কখনও সাহায্যকারী ব্যবহার করা উচিত নয়।
সাহায্যকারীরা কেবল সম্পর্কিত নয় এমন পদ্ধতিগুলির সংগ্রহ এবং সর্বদা একক হিসাবে ব্যবহৃত হয়।
এটি মূলত কিছু নেমস্পেসের অধীনে গ্রুপযুক্ত ফাংশনগুলির সাথে প্রক্রিয়াগত প্রোগ্রামিং (এই ক্ষেত্রে শ্রেণীর নাম)। তবে যেহেতু ম্যাগেন্তোর মূল সাহায্যকারী রয়েছে আপনি নিজের পদ্ধতিগুলি সেখানে রেখে দিতে পারেন যে কোথায় রাখবেন তা আপনার কোনও ধারণা নেই বা যদি আপনাকে বিভিন্ন স্থানে (মডেল, নিয়ন্ত্রক, টেম্পলেট) কল করার প্রয়োজন হয় তবে
এগুলি সর্বশেষ উপায় হিসাবে ব্যবহার করুন।
এছাড়াও ম্যাজেন্টো অনুবাদ কারণে প্রতিটি মডিউল জন্য একটি সহায়ক প্রয়োজন।
আপনি Data.php
প্রতিটি মডিউলে ডাকা একটি সহায়ক তৈরি করতে এবং খালি রেখে দিতে পারেন।
প্রশ্নের দুটি দিক রয়েছে:
সাধারণভাবে, ক্লাসগুলির নামকরণ করা Helper
,Util
বা অনুরূপ কেবল বলে "আমার কিছু ফাংশন রয়েছে যা আমি কোথায় রাখব জানি না" এবং শ্রেণি হিসাবে খুব বেশি বোঝায় না।
ম্যাজেন্টো হেল্পারকে সিঙ্গেলন হিসাবে ইনস্ট্যান্ট করে এবং মূল সহায়কগুলির বেশিরভাগের কোনও রাজ্য নেই, সুতরাং পদ্ধতিগুলি পাশাপাশি static
বা functions
কোনও শ্রেণি ছাড়াই হতে পারে । এই সমস্ত প্রায়শই একটি কোড গন্ধ হিসাবে বিবেচিত হয় হয়, অ্যাপ্লিকেশন ডিজাইনের একটি ত্রুটি।
মারিয়াস যেমন ইতিমধ্যে উল্লেখ করেছে, আপনার নিজের কোডের জন্য আপনাকে সাহায্যকারী ব্যবহার করার দরকার নেই। আপনি যদি মডিউল নির্দিষ্ট অনুবাদ ব্যবহার করেন তবে মডিউল প্রতি কেবল একটি ডিফল্ট খালি সহায়ক তৈরি করুন, অন্যথায় তারা কাজ করবে না। মডেলগুলি পছন্দ করুন (যা প্রসারিত করার দরকার নেইMage_Core_Model_Abstract
তারা ডেটাবেস ডেটা উপস্থাপন না ) বা স্বতঃ গ্রন্থাগার ক্লাসগুলি পছন্দ করুন।
তবে আমি "একেবারে সাহায্যকারীদের ব্যবহার না করা" এবং এর পরিবর্তে কোয়েরি শর্টকাটগুলির জন্য তাদের ব্যবহার সম্পর্কে খুব কঠোর হব না:
অ্যাক্সেস মডিউল কনফিগারেশন:
public function getFooBar()
{
return Mage::getStoreConfig('module/foo/bar');
}
গ্রন্থাগার ক্লাস জন্য কারখানা পদ্ধতি
public function getNewFooService()
{
return new \Foo\Service(...);
}
আপনি অন্য জায়গাগুলি খুঁজে পেতে পারেন তবে আইএমএইচও, মডিউল সহায়কটি এ জাতীয় জিনিসের জন্য প্রায়শই যথেষ্ট ভাল ।
গ্রাসকারীমূল সাহায্যকারীদের গ্রহণ করা এমন একটি বিষয় যা আপনি প্রায়শই ।
__()
অনুবাদ পদ্ধতি: একটি নির্দিষ্ট মডিউলটির অনুবাদ পেতে আপনার ব্যবহার করা উচিত Mage::helper('module-alias')->__('string to be translated')
। আপনি যদি $this->__(...)
কোনও টেম্পলেট বা ব্লকের মধ্যে ব্যবহার করেন এবং যদি ব্যবহার করেন তবে এটি স্পষ্টভাবে ঘটেtranslate="..."
এক্সএমএল ফাইলগুলিতে বৈশিষ্ট্যটি স্পষ্টতই ঘটেMage::helper('core')
পদ্ধতিগুলি: স্থানীয়করণের তারিখ, মূল্য এবং মুদ্রা বিন্যাসকরণ, পলায়ন এবং এনকোডিং ডেটাMage::helper('tax')
ট্যাক্স কনফিগারেশন থেকে তথ্য পেতে এবং তার উপর ভিত্তি করে মূল্য গণনা করার পদ্ধতিগুলিMage::helper('catalog/image')
ক্যাশেড এবং পুনরায় আকারযুক্ত ক্যাটালগ চিত্রগুলি তৈরি করতে এবং তাদের URL পুনরুদ্ধার করতে একটি ইন্টারফেস সরবরাহ করেMage::helper('catalog/product_url_rewrite')->joinTableToSelect()
পণ্য সংগ্রহের ক্যোয়ারিতে ইউআরএল পুনর্লিখন টেবিলের সাথে যোগ দেয়।মূল সহায়কগুলিতে আরও অনেকগুলি (কম বা বেশি) দরকারী ফাংশন লুকানো আছে, যদি আপনার কোনও নির্দিষ্ট কার্যকারিতা প্রয়োজন হয় যা সম্ভবত কোথাও কোরে ব্যবহৃত হতে পারে তবে আপনি কোনও সহায়ক পদ্ধতি পুনরায় ব্যবহার করতে পারবেন কিনা তা পরীক্ষা করে দেখুন।
সাধারণত এই সাহায্যকারীরা স্টেটলেস অবজেক্ট এবং পদ্ধতিগুলি হল কোয়েরি পদ্ধতি (যেমন তাদের কোনও পার্শ্ব প্রতিক্রিয়া নেই)
তবে সর্বদা হিসাবে ম্যাজেন্টো তার নিজস্ব অলিখিত নিয়ম ভঙ্গ করে এবং এটি উদাহরণ হিসাবে নেওয়া উচিত নয়। সহায়কদের কীভাবে ব্যবহার করবেন না Mage_Catalog_Helper_Product_Compare
তার একটি "উদাহরণ" উদাহরণটি এমন একটি $_itemCollection
সম্পত্তি যা কেবল একবারই আরম্ভ করা যায় এবং একটি $_customerId
সম্পত্তি যা একটি সেটারের সাহায্যে পরিবর্তন করা যায়। সংযুক্ত সংগ্রহের সাথে ক্যাটালগ সম্পর্কিত আরও কয়েকটি সহায়ক পাবেন। কোড ব্যবহারের জন্য টেস্টগুলি লিখতে বা তাদের বিভিন্ন প্রসঙ্গে পুনরায় ব্যবহার করা মজাদার নয়, তাই দয়া করে বাড়িতে এটি করবেন না।
catalog/image
সাহায্যকারী উপরে উল্লিখিত একটি সাহায্যকারী যে সত্যিই একটি সাহায্যকারী করা উচিত হবে না আরেকটি উদাহরণ। আপনাকে init()
প্রথমে এমন একটি পণ্য পাস করতে হবে যা তার বর্তমান অবস্থা পুনরায় সেট করে, তারপরে আপনি বিভিন্ন পরামিতি (যেমন resize()
, setQuality()
) সেট করেন এবং শেষ পর্যন্ত আপনি এর __toString()
পদ্ধতিটি সহ URL টি পেতে পারেন । কোনও টেম্পলেটটিতে ব্যবহার করার সময় এটি দেখতে দুর্দান্ত লাগে তবে কোডটি একটি বিশাল জগাখিচুড়ি এবং এটি সিঙ্গলটন হিসাবে কোনও অর্থ দেয় না।
টি এল; ডিআর:
Reader
এবং Writer
মডেলগুলি, যা আসলে থাকে (অন্তত কোনও ফাইলের উত্স) থাকে। উদাহরণস্বরূপ, কোনও সিএসভি ফাইল থেকে অর্ডার স্থিতির ডেটা পড়ার জন্য আমার কাছে স্টিচ হবে। OrderStatusCsvReader
মডেল দ্বারা ব্যবহৃত হয় এমন একটি মডেল লাইক করুন OrderStatusUpdater
। এইভাবে আমি উদ্বেগগুলি "ফাইল থেকে ডেটা পড়ুন" এবং "ম্যাজেন্টোতে হালনাগাদ করার আদেশ" আলাদা করি
মারিয়াস ঠিক বলেছেন। আমি মনে করি সাহায্যকারীরা বাজে কথা।
তবে ম্যাজেন্টো তত্ত্বে আপনার সবকিছু এমন সাহায্যকারীদের মধ্যে রাখা উচিত যা কোনও বস্তুর অবস্থার পরিবর্তন না করে, যেমন ফর্ম্যাট করা দাম পান।
তবে আপনি যে কোনও সহায়ককে রাখতে পারেন তা আপনি কোনও মডেলও রাখতে পারেন। এবং আপনি কোনও মডেলের বিভিন্ন উদাহরণ পেতে পারেন যা পরীক্ষার জন্য সহায়ক।
আমি ম্যাজেন্টোতে বেশ নতুন, তবে আমার কাছে মনে হচ্ছে হেল্পার হ'ল ম্যাজেন্টোর একটি পরিষেবার সমতুল্য : "সম্পর্কিত বিভিন্ন সফ্টওয়্যার কার্যকারিতার একটি সেট যা বিভিন্ন উদ্দেশ্যে পুনরায় ব্যবহার করা যেতে পারে"। একটি মডিউল পরিষেবাগুলির মাধ্যমে এর প্রস্তাবিত কার্যকারিতা রফতানি করে। আপনি অন্যান্য মডিউলগুলি ব্যবহারের জন্য আমন্ত্রণ করেন এমন ফাংশনগুলির জন্য একটি সহায়ক ব্যবহার করুন।
কোনও মডেলকে কেবল এমন পদ্ধতি সরবরাহ করা উচিত যা কোনও অবজেক্টের অবস্থা পাওয়ার বা সেটিংয়ের সাথে সরাসরি সম্পর্কিত বা অন্যথায় এটি মডেলের ইনস্ট্যান্টেটেড অবজেক্টের সাথে যুক্ত।
সদৃশ কোড (মডেল, টেম্পলেট, ...) রোধ করতে দরকারী এবং কিছু সময় এগুলি কেবল প্রয়োজনীয়।
Mage::getStoreConfigFlag('my/module/enabled')
যেখানে যাচাই করতে চান সেখানে প্রতি ফাইলের মতো কিছু রাখতে পারেন , বা আপনি Mage::helper('my_module')->isEnabled()
সুবিধা সহ ব্যবহার করতে পারেন :
isEnabled()
পদ্ধতি পুনর্লিখন করতে পারেন এবং এটি বেশ কয়েকটি ফাইল পুনরায় লেখার পরিবর্তে এটি ব্যবহার করে এমন সমস্ত শ্রেণীর উপর প্রভাব ফেলবেMage_Catalog_Model_Product
পদ্ধতিটি যুক্ত করতে করুন getProductArticles()
। ঠিক । আপনার সহায়ক যোগ করুনgetProductArticles(Mage_Catalog_Model_Product $product)
<action method="someMethod"><var helper="module/method" /></action>
আপনি কেবল একটি সহায়ক বলা যেতে পারেন
Data.php
প্রতিটি মডিউলে এবং খালি রেখে দিতে পারেন ।
PHPUnit ব্যবহার করার সময় আপনার একটি একক লাইন যুক্ত করা উচিত :protected $_moduleName = 'My_Module';
foreach
লুপগুলির মধ্যে সংগ্রহগুলি লোড করে চলেছিল এবং সমস্ত প্রকারের উন্মাদনা। আমি একজন সহায়ককে এই আতঙ্কজনক যুক্তিটি প্রমাণ করতে এবং এটি একটি বস্তু ক্যাশে হিসাবে কার্যকর হিসাবে ব্যবহার করে দেখতে পেয়েছি এবং ভবিষ্যতের বিকাশকারীদের ত্রুটিগুলির জন্য খুব সামান্য জায়গা রেখেছি যারা যদি আমি এটি কোনও মডেলে রাখি তারgetModel
পরিবর্তে দুর্ঘটনাক্রমে কল করতে পারেgetSingleton
।