কীভাবে সমস্ত হুক_আপডেট_এন () চালানোর জন্য হুক_ইনস্টল () পাবেন?


18

আমার মডিউলের জন্য থাকা সমস্ত আপডেট চালানোর জন্য আমি কীভাবে হুক_ইনস্টল () পেতে পারি? আমার এতে mymod.install ফাইল রয়েছে।

আমি চেষ্টা করেছি

function mymod_install() {
  mymod_update_6001();
}

তবে কিছু করার মনে হচ্ছে না। আমার কাছে যদি একটি মমোড_আপডেট__০০২ () থাকে তবে আমি কী এখনও 1০০১ () কল করতে পারি, কেবল 6002 () কল করুন বা 6001 (), 6002 () ক্রমে উভয়কে কল করুন।

আমি ভেবেছিলাম যখন আপনি ডিফল্টরূপে কোনও মডিউল ইনস্টল করেন তখন সমস্ত আপডেট চালানো সাধারণ জ্ঞান হবে।

উত্তর:


19

আপডেটগুলি চালানোর জন্য আপনার ইনস্টল হুকটি পাওয়া উচিত নয়। যখন কোনও মডিউল প্রথমবার ইনস্টল করা হয় তখন কোনও আপডেটের প্রয়োজন হবে না।

ইতিমধ্যে মডিউল ইনস্টল হওয়ার পরে আপডেটগুলি ব্যবহার করা হয় (ডাটাবেস বা ভেরিয়েবলগুলি তৈরি করা হয়েছে)। সেক্ষেত্রে আপনি মডিউলটি পুনরায় ইনস্টল করতে চান না কারণ এটি সমস্ত ডেটা মুছবে, পরিবর্তে আপনি আপডেট_এন হুক তৈরি করেন। ড্রুপাল সনাক্ত করবে যে কোন আপডেটগুলি প্রয়োজন এবং সেগুলি চালিত হবে update.php। ড্রুপাল 6 এ এটি স্বয়ংক্রিয়ভাবে কোন আপডেটগুলি করতে হবে তা নির্বাচন করবে তবে আপনি এটি পরিবর্তন করতে পারবেন, যদিও দ্রুপাল 7 এ এটি সম্ভব নয়।

সর্বশেষ রান আপডেটের সংখ্যা সংরক্ষণ করে কোন আপডেটগুলি প্রয়োজন তা ডি্রুপাল সনাক্ত করে। এটি ডাটাবেসে পরিবর্তন হতে পারে, যা দ্রুপাল in-এ আপডেটগুলি পুনরায় চালিত করার অনুমতি দেবে।

সর্বদা আপডেটগুলি চালনার আগে আপনার ডাটাবেসটিকে ব্যাকআপ করতে ভুলবেন না।


15

হুকের উদ্দেশ্য আলাদা।

  • মডিউল ইনস্টল হওয়ার পরে হুক_ইনস্টল () ডাকে ; এর অর্থ মডিউলটি আগে ইনস্টল করা হয়নি এবং তাই এটি আপডেট করার দরকার নেই।
  • ইতিমধ্যে একটি মডিউল ইনস্টল থাকা অবস্থায় hook_update_N () ডাকা হয় এবং এটি আপডেট করা দরকার।

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

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


5

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

আপডেট ফাংশনগুলিকে ইনস্টল করার জন্য চালাতে বাধ্য করতে, আপনাকে উদাহরণস্বরূপ আপনার স্কিমা সংস্করণটি পরিবর্তন করতে হবে:

function mymod_install() {
  // Reset the schema version, so our update hooks can be processed during the installation.
  drupal_set_installed_schema_version('mymod', '7000');
  // Then run the updates as usual.
  mymod_update_7001();
}

অথবা এটা drush থেকে চালানো: drush -y updb

আরও দেখুন: আপনার মডিউলটির আপডেট হুকটি চালাতে বাধ্য করা কি সম্ভব?


1

হুক_ইনস্টল mymod.moduleফাইলটিতে কাজ করবে না ।

আপনি জায়গা আছে hook_installএবং hook_uninstallএকটি পৃথক ফাইলেmymod.install

আমার ধারণা hook_update_N()এটিও স্থাপন করা উচিতmymod.install


প্রশ্নের আপডেটের পরে উত্তর:

একটি লিঙ্ক থেকে উদ্ধৃতি দিয়ে , দয়া করে তথ্য ফাইলে আপনার সংস্করণ নম্বর পরীক্ষা করুন।

যেহেতু আমি ব্যক্তিগতভাবে বিকাশ করছি এবং অবদানের জন্য নয়, তাই আমার মডিউলটির .info ফাইলটিতে আমার 'ভার্সন' ক্ষেত্রটি ফাঁকা বা অপরিবর্তিত যখন আমি কোনও মডিউল আপডেট করি। আমি প্রকৃতপক্ষে গ্রহন পিডিটি-র জন্য সাবভারসিভ ব্যবহার করছি এবং তাই আমার তথ্য ফাইল সংস্করণ নম্বরগুলি কখনই আপডেট হয় না। সুতরাং, আমার হুক_আপডেট_6001 আপডেট.এফপি দ্বারা কল করা হয়নি।

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