আমার হুকগুলি দ্রুপাল দ্বারা চালিত নয়


9

আমি একটি মডিউল বিকাশ করছি, তবে আমি যে হুকগুলি যুক্ত করছি তা দ্রুপাল থেকে নেওয়া হয়নি। একাধিক হুক দিয়ে এটি ঘটে।

আমি হুকগুলির জন্য ডকুমেন্টেশন পড়েছি এবং কেন এমন হয় তা ব্যাখ্যা করার মতো কোনও কিছুই আমি পাই না। আমি যাচাই করেছি যে আমি সঠিক প্যারামিটারগুলি ব্যবহার করছি এবং সঠিক মানটি ফিরিয়ে দিচ্ছি।

আমি কি ভুল করছি? আমি কি অনুপস্থিত কিছু আছে?


এই প্রশ্নটি হ্রুপ সম্পর্কে দ্রুপাল দ্বারা চালিত না হওয়া সম্পর্কিত সেই প্রশ্নগুলির পক্ষে প্রৌon় প্রশ্ন হিসাবে বিবেচিত।
কিমলালুনো

উত্তর:


13

একটি মডিউল বিকাশ করার সময়, আপনাকে নিম্নলিখিত নোটগুলি মনে রাখা উচিত।

  • মডিউল থেকে সম্পন্ন হুকের বাস্তবায়ন এমন একটি ফাংশন যার নামটি মডিউলটির সংক্ষিপ্ত নাম (যাকে মেশিনের নামও বলা হয় ) সহ উপস্থাপিত হয় ; হুক নাম থেকে, হুক অংশটি খুলে ফেলুন এবং মডিউল মেশিনের নাম দিয়ে এটি প্রতিস্থাপন করুন। উদাহরণস্বরূপ, উদাহরণ hook_menu()থেকে মডেলটি সম্পন্ন হয়েছে example_menu()। যদি মডিউলটি হল_মেনু.মডিউল এবং ফাংশনটি হয় example_menu(), তবে এটি hook_menu()উদাহরণস্বরূপ_মেনু.মডিউল বাস্তবায়ন হিসাবে বিবেচিত হয় না ।
    এটির উদাহরণস্বরূপ, উদাহরণস্বরূপ, hook_form_alter()উদাহরণ_for.module এ বাস্তবায়নটি নয় example_form_alter(), তবে example_form_form_alter()। অন্য উদাহরণ হিসাবে, hook_form_FORM_ID_alter()ফর্মটি পরিবর্তনের জন্য করা বাস্তবায়ন উদাহরণ থেকে ফিরে user_register_form()এসেছে mod মডুলেলটি নয় example_form_user_register_alter(), তবেexample_form_user_register_form_alter()। (ফর্ম আইডি নয় user_register_form ।)

  • সাধারণভাবে বলতে গেলে, মডিউল মেশিনের নামে বড় হাতের অক্ষর ব্যবহার করে সমস্যা তৈরি হয় না: পিএইচপি myModule_get_value(), এবং mymodule_get_value(), এবং এর মধ্যে পার্থক্য তৈরি করে না , এবং $value = myModule_get_value()হয় কল করবে myModule_get_value(), বা mymodule_get_value()
    যদিও, এমন একটি ক্ষেত্রে রয়েছে যেখানে মডিউল মেশিনের নামে বড় হাতের অক্ষরগুলি ব্যবহার করা সমস্যার কারণ হতে পারে: যখন মডিউলটির জন্য আপডেট হুক সংজ্ঞা দেওয়া হয়। drupal_get_schema_versions(), ফাংশন যা উপলভ্য আপডেটগুলির একটি তালিকা ফিরিয়ে দেয় তাতে নিম্নলিখিত কোড রয়েছে।

    // Prepare regular expression to match all possible defined hook_update_N().
    $regexp = '/^(?P<module>.+)_update_(?P<version>\d+)$/';
    $functions = get_defined_functions();
    // Narrow this down to functions ending with an integer, since all
    // hook_update_N() functions end this way, and there are other
    // possible functions which match '_update_'. We use preg_grep() here
    // instead of foreaching through all defined functions, since the loop
    // through all PHP functions can take significant page execution time
    // and this function is called on every administrative page via
    // system_requirements().
    foreach (preg_grep('/_\d+$/', $functions['user']) as $function) {
      // If this function is a module update function, add it to the list of
      // module updates.
      if (preg_match($regexp, $function, $matches)) {
        $updates[$matches['module']][] = $matches['version'];
      }
    }
    

    শেষ করা লাইনটি drupal_get_schema_versions()নিম্নলিখিতটি হ'ল।

    return empty($updates[$module]) ? FALSE : $updates[$module];

    যদি মডিউলটির নাম আমারমোডিউল.মডিউল হয় তবে মাইমডিউল_আপডেট drupal_get_schema_versions('myModule')দিয়ে শুরু হওয়া এবং একটি সংখ্যার সাথে শেষ হবে এমন একটি নাম দিয়ে কেবল ফাংশনগুলি ফিরিয়ে দেবে; মত ফাংশন mymodule_update_7120()অন্তর্ভুক্ত করা হবে না কারণ থেকে নিয়মিত প্রকাশটি ব্যবহৃত drupal_get_schema_versions()হয় সংবেদনশীল। এটি এখনও দ্রুপাল 8-র ক্ষেত্রে প্রযোজ্য, কারণ নিয়মিত প্রকাশটি এখনও দ্রুপাল 7-তে ব্যবহৃত।

  • কিছু মুহূর্ত নির্দিষ্ট মুহূর্তে ডাকা হয়। উদাহরণস্বরূপ, hook_menu()এবং hook_menu_alter()মডিউল সক্ষম / অক্ষম করার পরে বা রাউটারের তথ্যের জন্য ক্যাশে সাফ হওয়ার পরে ড্রুপাল 7 থেকে ডাকা হয়; hook_init()ক্যাশেড পৃষ্ঠাগুলির জন্য অনুরোধ করা হয় না।
    হুকগুলি একবার অনুরোধ করা হয়েছিল কারণ একটি নির্দিষ্ট ইভেন্টটি ঘটেছে, ততক্ষণ কোনও অনুরূপ ইভেন্ট না ঘটে ততক্ষণ তাদের আর ডাকা হবে না। পর পর দুটি পৃষ্ঠার অনুরোধে তাদের ডাকা হয় না।

  • ড্রুপাল একটি মডিউল থেকে প্রয়োগ করা হুকের তালিকা ক্যাশে করে। আপনি যদি নতুন হুক যুক্ত করার জন্য কোনও সক্ষম মডিউলটির কোড সম্পাদনা করছেন তবে আপনাকে প্রথমে মডিউলটি অক্ষম করতে এবং পুনরায় সক্ষম করতে হবে, বা ড্রুপাল লক্ষ্য করবেন না যে সেখানে নতুন হুক রয়েছে।

  • returnরিফ্যাক্টরিংয়ের সময় নিশ্চিত হয়ে নিন যে কোনও বিবৃতি আপনার হুক ফাংশনগুলির মধ্যে একটির দিকে ঝুঁকেছে না। এটিতে প্রদর্শিত হুকটি কেবল ভাঙ্গার সম্ভাবনা রয়েছে, তবে চেইন প্রতিক্রিয়া সৃষ্টি করে যা অন্যান্য হুকগুলিকেও ভেঙে দেয়, সমস্যাটি সনাক্ত করা কঠিন করে তোলে।


ভবিষ্যতে অন্যের জন্যও আমার ভুলটি উল্লেখ করার উপযুক্ত হতে পারে: আপনার। Module (বা অন্য কোনও "ফ্ল্যাট", নন-ক্লাস পিএইচপি) ফাইলে কোনও নেমস্পেসের সংজ্ঞা দেবেন না। অন্যথায় দ্রুপাল আপনার ফাইলটি চিনতে পারবেন না, সুতরাং তাদের মধ্যে সংজ্ঞাযুক্ত হুকগুলি আবিষ্কার করবে না।
বালু এরটল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.