কাস্টম মডিউলে ইভেন্টগুলি কখন প্রেরণ করবেন?


14

এটি ম্যাজেন্টো 1 এবং ম্যাজেন্টো 2 উভয়ই সম্পর্কে একটি প্রশ্ন।

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

আমি জানতে চাই:

  • কোন বিকাশকারীকে কাস্টম মডিউলে ইভেন্টগুলি প্রেরণ করা উচিত?
  • অনুষ্ঠান প্রেরণের জন্য কি কোনও প্রস্তাবিত স্পট রয়েছে? যেমন কন্ট্রোলার, মডেল, ব্লক, সাহায্যকারী, পর্যবেক্ষক?
  • কীভাবে প্রেরণ ইভেন্টগুলি পারফরম্যান্সকে প্রভাবিত করে?

হ্যাঁ! ভাল প্রশ্ন. যে কেউ এই প্রশ্নের উত্তর দিন। এটি তৃতীয় পক্ষের এক্সটেনশান বিকাশকারীদের পাশাপাশি কাস্টম প্রকল্পগুলির জন্য খুব সহায়ক।
ম্যাপলাদিয়া

উত্তর:


10

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

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

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

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

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

আশা করি এইটি কাজ করবে!


9

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

ম্যাজেন্টো 2 এর সাথে পরিস্থিতি আলাদা। যেহেতু পাবলিক মেথড কলগুলি প্লাগইনগুলির সাথে বাধা দেওয়া যায়, তাই কাস্টম ইভেন্টগুলির আর প্রয়োজন হয় না।
ক্লাস ডিজাইন করার সময়, প্রতিটি পদ্ধতিটিকে কেবল সর্বজনীন করার পরিবর্তে এটি যাতে বাধা দেওয়া যায়, তার চেয়ে বড় শ্রেণিকে একাধিক ছোট শ্রেণিতে বিভক্ত করা ভাল।
এরপরে প্রতিটি ছোট ছোট ক্লাসের একটি বা দুটি সুন্দর নামকরণ এবং ইন্টারসেপটেবল পাবলিক পদ্ধতি থাকতে পারে।


0

বিনাই যেমন বলেছিলেন, সিআরইউডি অপারেশনের আগে / পরে। ইভেন্টগুলি প্রেরণের জন্য আরেকটি গুরুত্বপূর্ণ জায়গা হ'ল প্রশাসনিক ফর্ম ব্লকগুলিতে (প্রযোজ্য ক্ষেত্রে)। আপনি যদি প্রশাসক ফর্ম ব্লকগুলি পুনরায় লেখার জন্য কাস্টম বৈশিষ্ট্য / ক্ষেত্রগুলি যুক্ত করেন তবে আপনি নতুন ইনপুট ক্ষেত্রগুলি যুক্ত করতে পারেন। (এটি ম্যাজেন্টো 1 এর জন্য)। উদাহরণ দেখুন


0

ম্যাজেন্টো 1 এর অভ্যন্তরে, আপনি ঘটে যাওয়া অটো-চালিত ইভেন্টগুলির মাধ্যমে ইভেন্টগুলি উপার্জন করতে পারেন। আপনাকে যা করতে হবে তা হ'ল আপনার মডেলগুলিতে একটি $_eventPrefixএবং $_eventObjectবৈশিষ্ট্য সেট করা । এছাড়াও, আপনি স্বয়ংক্রিয়ভাবে নিয়ামকটিতে ইভেন্ট 'controller_action_predispatch_ ' . $this->getFullActionName()এবং 'controller_action_postdispatch_' . $this->getFullActionName()ইভেন্টগুলির মাধ্যমে কাস্টম ফায়ারড কন্ট্রোলার ইভেন্টগুলি করেছেন । সেগুলি আপনাকে বেশিরভাগ পথে পেতে পারে।

ম্যাজেন্টো 2 এর জন্য, আপনার ক্লাসের অভ্যন্তরে আপনার পদ্ধতিগুলি সর্বজনীন রাখুন। এটি প্লাগিনগুলিকে আপনার পদ্ধতিগুলিকে বাধা দিতে দেয়। আপনি যদি এটি অনুসরণ করেন তবে আপনাকে কোনও কাস্টম ইভেন্ট তৈরি করতে হবে না।

আশা করি এটা কাজে লাগবে!

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