ম্যাজেন্টোতে সাহায্যকারী কী?


উত্তর:


27

তাত্ত্বিকভাবে আপনার কখনও সাহায্যকারী ব্যবহার করা উচিত নয়।
সাহায্যকারীরা কেবল সম্পর্কিত নয় এমন পদ্ধতিগুলির সংগ্রহ এবং সর্বদা একক হিসাবে ব্যবহৃত হয়।
এটি মূলত কিছু নেমস্পেসের অধীনে গ্রুপযুক্ত ফাংশনগুলির সাথে প্রক্রিয়াগত প্রোগ্রামিং (এই ক্ষেত্রে শ্রেণীর নাম)। তবে যেহেতু ম্যাগেন্তোর মূল সাহায্যকারী রয়েছে আপনি নিজের পদ্ধতিগুলি সেখানে রেখে দিতে পারেন যে কোথায় রাখবেন তা আপনার কোনও ধারণা নেই বা যদি আপনাকে বিভিন্ন স্থানে (মডেল, নিয়ন্ত্রক, টেম্পলেট) কল করার প্রয়োজন হয় তবে

এগুলি সর্বশেষ উপায় হিসাবে ব্যবহার করুন।

এছাড়াও ম্যাজেন্টো অনুবাদ কারণে প্রতিটি মডিউল জন্য একটি সহায়ক প্রয়োজন।
আপনি Data.phpপ্রতিটি মডিউলে ডাকা একটি সহায়ক তৈরি করতে এবং খালি রেখে দিতে পারেন।


সাহায্যকারীদের জন্য আমি খুঁজে পেয়েছি শুধুমাত্র আসল "ব্যবহার" হ'ল তারা সর্বদা সিঙ্গলটন হওয়ার গ্যারান্টিযুক্ত। আমি কিছু শিক্ষাগত লিগ্যাসি কোড নিয়ে কাজ করেছি যা foreachলুপগুলির মধ্যে সংগ্রহগুলি লোড করে চলেছিল এবং সমস্ত প্রকারের উন্মাদনা। আমি একজন সহায়ককে এই আতঙ্কজনক যুক্তিটি প্রমাণ করতে এবং এটি একটি বস্তু ক্যাশে হিসাবে কার্যকর হিসাবে ব্যবহার করে দেখতে পেয়েছি এবং ভবিষ্যতের বিকাশকারীদের ত্রুটিগুলির জন্য খুব সামান্য জায়গা রেখেছি যারা যদি আমি এটি কোনও মডেলে রাখি তার getModelপরিবর্তে দুর্ঘটনাক্রমে কল করতে পারে getSingleton
লূক রজার্স 20'15

@LukeRodgers। আমি আপনার বক্তব্যটি দেখছি তবে আমি মনে করি না যে "ঘটনাক্রমে getSodleton এর পরিবর্তে getModel কল করতে পারে" সহায়তাকারীদের ব্যবহারের আসল কারণ হিসাবে যোগ্যতা অর্জন করে। আমি যুক্তি দিতে পারি যে আপনি "সংরক্ষণ" এর পরিবর্তে "দুর্ঘটনাক্রমে" কল "ডিলিট" করতে পারেন। এড়াতে আপনি কী সুরক্ষা রাখতে পারেন? আমার ধারণা "মনোযোগ দেওয়া" সফ্টওয়্যার বিকাশের অংশ is
মারিয়াস

একমত। এই পরিস্থিতিতে আমি অনুমান করি যে আমি কেবল মানবতার বিরুদ্ধে রক্ষণাত্মক কোড দেওয়ার চেষ্টা করছি।
লুক রজার্স 10

আপনি কীভাবে মূল সহায়কগুলিতে কাস্টম পদ্ধতি যুক্ত করতে যাবেন?
টেকজাম

13

প্রশ্নের দুটি দিক রয়েছে:

  1. আমার নিজের সাহায্যকারীদের লিখতে হবে এবং কীসের জন্য?
  2. আমি কি মূল সহায়কগুলি ব্যবহার করব এবং কীসের জন্য?

1. সাহায্যকারীদের লেখার

সাধারণভাবে, ক্লাসগুলির নামকরণ করা Helper,Util বা অনুরূপ কেবল বলে "আমার কিছু ফাংশন রয়েছে যা আমি কোথায় রাখব জানি না" এবং শ্রেণি হিসাবে খুব বেশি বোঝায় না।

ম্যাজেন্টো হেল্পারকে সিঙ্গেলন হিসাবে ইনস্ট্যান্ট করে এবং মূল সহায়কগুলির বেশিরভাগের কোনও রাজ্য নেই, সুতরাং পদ্ধতিগুলি পাশাপাশি staticবা functionsকোনও শ্রেণি ছাড়াই হতে পারে । এই সমস্ত প্রায়শই একটি কোড গন্ধ হিসাবে বিবেচিত হয় হয়, অ্যাপ্লিকেশন ডিজাইনের একটি ত্রুটি।

মারিয়াস যেমন ইতিমধ্যে উল্লেখ করেছে, আপনার নিজের কোডের জন্য আপনাকে সাহায্যকারী ব্যবহার করার দরকার নেই। আপনি যদি মডিউল নির্দিষ্ট অনুবাদ ব্যবহার করেন তবে মডিউল প্রতি কেবল একটি ডিফল্ট খালি সহায়ক তৈরি করুন, অন্যথায় তারা কাজ করবে না। মডেলগুলি পছন্দ করুন (যা প্রসারিত করার দরকার নেইMage_Core_Model_Abstract তারা ডেটাবেস ডেটা উপস্থাপন না ) বা স্বতঃ গ্রন্থাগার ক্লাসগুলি পছন্দ করুন।

তবে আমি "একেবারে সাহায্যকারীদের ব্যবহার না করা" এবং এর পরিবর্তে কোয়েরি শর্টকাটগুলির জন্য তাদের ব্যবহার সম্পর্কে খুব কঠোর হব না:

  • অ্যাক্সেস মডিউল কনফিগারেশন:

    public function getFooBar() 
    {
        return Mage::getStoreConfig('module/foo/bar');
    }
  • গ্রন্থাগার ক্লাস জন্য কারখানা পদ্ধতি

    public function getNewFooService()
    {
        return new \Foo\Service(...);
    }

আপনি অন্য জায়গাগুলি খুঁজে পেতে পারেন তবে আইএমএইচও, মডিউল সহায়কটি এ জাতীয় জিনিসের জন্য প্রায়শই যথেষ্ট ভাল


2. সাহায্যকারীদের ব্যবহার

গ্রাসকারীমূল সাহায্যকারীদের গ্রহণ করা এমন একটি বিষয় যা আপনি প্রায়শই ।

উদাহরণ:

  • __()অনুবাদ পদ্ধতি: একটি নির্দিষ্ট মডিউলটির অনুবাদ পেতে আপনার ব্যবহার করা উচিত 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 টি পেতে পারেন । কোনও টেম্পলেটটিতে ব্যবহার করার সময় এটি দেখতে দুর্দান্ত লাগে তবে কোডটি একটি বিশাল জগাখিচুড়ি এবং এটি সিঙ্গলটন হিসাবে কোনও অর্থ দেয় না।


টি এল; ডিআর:

  • মূল সহায়কগুলিতে দরকারী সরঞ্জাম রয়েছে।
  • অনুবাদ করার জন্য আপনার সাহায্যকারী দরকার
  • সাহায্যকারীদের রাষ্ট্রহীন হওয়া উচিত
  • আপনার নিজের মডিউলগুলিতে, সহায়তাকারীদের বিভিন্ন ধরণের ফাংশন সংগ্রহ হিসাবে ব্যবহার করা এড়িয়ে চলুন। বেশিরভাগ ক্ষেত্রে আপনি আরও বেশি অ্যাপোপিয়েট করার জায়গা খুঁজে পেতে পারেন

আমি প্রায়শই ফ্ল্যাট-ফাইলের ভিত্তিতে সাধারণ ইআরপি সংহতকরণে সহায়তাকারীদের ব্যবহার করেছি। তারা যা করে তা হ'ল স্থানীয় ডিরেক্টরি থেকে ফাইল লিখতে এবং পড়তে এবং অন্যান্য বস্তুগুলিকে আপডেট করে (পণ্য, ক্রম ইত্যাদি)। উল্লিখিত দৃষ্টান্তগুলিতে তাদের নিজস্ব নিজস্ব টেবিল নেই table আপনি এই গ্রহণ কি?
musicliftme

1
এটি "কোনও পার্শ্ব প্রতিক্রিয়া" লঙ্ঘন করে। আমার সাধারনত ফাইল পড়া এবং লেখার বিষয়গুলি হ'ল Readerএবং Writerমডেলগুলি, যা আসলে থাকে (অন্তত কোনও ফাইলের উত্স) থাকে। উদাহরণস্বরূপ, কোনও সিএসভি ফাইল থেকে অর্ডার স্থিতির ডেটা পড়ার জন্য আমার কাছে স্টিচ হবে। OrderStatusCsvReaderমডেল দ্বারা ব্যবহৃত হয় এমন একটি মডেল লাইক করুন OrderStatusUpdater। এইভাবে আমি উদ্বেগগুলি "ফাইল থেকে ডেটা পড়ুন" এবং "ম্যাজেন্টোতে হালনাগাদ করার আদেশ" আলাদা করি
ফ্যাবিয়ান শেমংলার

4

মারিয়াস ঠিক বলেছেন। আমি মনে করি সাহায্যকারীরা বাজে কথা।

তবে ম্যাজেন্টো তত্ত্বে আপনার সবকিছু এমন সাহায্যকারীদের মধ্যে রাখা উচিত যা কোনও বস্তুর অবস্থার পরিবর্তন না করে, যেমন ফর্ম্যাট করা দাম পান।

তবে আপনি যে কোনও সহায়ককে রাখতে পারেন তা আপনি কোনও মডেলও রাখতে পারেন। এবং আপনি কোনও মডেলের বিভিন্ন উদাহরণ পেতে পারেন যা পরীক্ষার জন্য সহায়ক।


2

আমি ম্যাজেন্টোতে বেশ নতুন, তবে আমার কাছে মনে হচ্ছে হেল্পার হ'ল ম্যাজেন্টোর একটি পরিষেবার সমতুল্য : "সম্পর্কিত বিভিন্ন সফ্টওয়্যার কার্যকারিতার একটি সেট যা বিভিন্ন উদ্দেশ্যে পুনরায় ব্যবহার করা যেতে পারে"। একটি মডিউল পরিষেবাগুলির মাধ্যমে এর প্রস্তাবিত কার্যকারিতা রফতানি করে। আপনি অন্যান্য মডিউলগুলি ব্যবহারের জন্য আমন্ত্রণ করেন এমন ফাংশনগুলির জন্য একটি সহায়ক ব্যবহার করুন।

কোনও মডেলকে কেবল এমন পদ্ধতি সরবরাহ করা উচিত যা কোনও অবজেক্টের অবস্থা পাওয়ার বা সেটিংয়ের সাথে সরাসরি সম্পর্কিত বা অন্যথায় এটি মডেলের ইনস্ট্যান্টেটেড অবজেক্টের সাথে যুক্ত।


1

সদৃশ কোড (মডেল, টেম্পলেট, ...) রোধ করতে দরকারী এবং কিছু সময় এগুলি কেবল প্রয়োজনীয়।

  • আপনি কাস্টম মডিউলটি সক্ষম কিনা তা যাচাই করার জন্য, আপনি Mage::getStoreConfigFlag('my/module/enabled')যেখানে যাচাই করতে চান সেখানে প্রতি ফাইলের মতো কিছু রাখতে পারেন , বা আপনি Mage::helper('my_module')->isEnabled()সুবিধা সহ ব্যবহার করতে পারেন :
    • যদি কোনও কারণে কনফিগার পাথ পরিবর্তিত হয় তবে আপনাকে কেবল একটি ফাইল সামঞ্জস্য করতে হবে
    • আপনি সাহায্যকারী isEnabled()পদ্ধতি পুনর্লিখন করতে পারেন এবং এটি বেশ কয়েকটি ফাইল পুনরায় লেখার পরিবর্তে এটি ব্যবহার করে এমন সমস্ত শ্রেণীর উপর প্রভাব ফেলবে
  • 13 তম @ কিভাবে কাস্টম এক্সটেনশন লিখবেন? : প্রয়োজনীয় না হলে পুনরায় লেখার ক্লাস করবেন না। পর্যবেক্ষকগুলি ব্যবহার করুন এবং যদি আপনি ওভাররাইড করতে চেয়েছিলেন এমন কোনও শ্রেণীর প্যারামিটার এবং উদাহরণ হিসাবে প্রাপ্ত সহায়ক সহায়ক ব্যবহার করা সম্ভব না হয়। ভুল: ওভাররাইড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';

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.