আমি কীভাবে হুক_ইনস্টল () ব্যবহার করে একটি ডাটাবেস সারণিতে ডিফল্ট মান যুক্ত করব?


9

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

হুক_ইনস্টল চলাকালীন এই টেবিলগুলিতে ডিফল্ট মান সন্নিবেশ করার সর্বোত্তম অনুশীলনের উপায় কী?

যেহেতু drupal_write_record উপলভ্য নয়, আমি db_query ব্যবহার করতে পারি, তবে আমি কেবল এটি নিশ্চিত করে নিশ্চিত করতে চাই যে আমি এটির মাধ্যমে কোনও মূল নিয়ম ভঙ্গ করছি না।

উত্তর:


7

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

hook_enable()অনুরূপ উদ্দেশ্যে ব্যবহৃত মডিউলটির উদাহরণ হিসাবে , আপনি ফোরাম_নেবল () , বা php_enable () যা "পিএইচপি কোড" ইনপুট ফর্ম্যাট যুক্ত করে) পরীক্ষা করতে পারেন can

function php_enable() {
  $format_exists = (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();
  // Add a PHP code text format, if it does not exist. Do this only for the
  // first install (or if the format has been manually deleted) as there is no
  // reliable method to identify the format in an uninstall hook or in
  // subsequent clean installs.
  if (!$format_exists) {
    $php_format = array(
      'format' => 'php_code', 
      'name' => 'PHP code',
      // 'Plain text' format is installed with a weight of 10 by default. Use a
      // higher weight here to ensure that this format will not be the default
      // format for anyone. 
      'weight' => 11, 
      'filters' => array(
        // Enable the PHP evaluator filter.
        'php_code' => array(
          'weight' => 0, 
          'status' => 1,
        ),
      ),
    );
    $php_format = (object) $php_format;
    filter_format_save($php_format);

    drupal_set_message(t('A <a href="@php-code">PHP code</a> text format has been created.', array('@php-code' => url('admin/config/content/formats/' . $php_format->format))));
  }
}

এই হুক বাস্তবায়ন থেকে প্রদর্শিত হিসাবে, কোড অগত্যা হুক কার্যকর করা হয় সব সময় কার্যকর করা প্রয়োজন হতে পারে; কোডটি কেবল একবার কার্যকর করা দরকার হতে পারে, যেমন ডাটাবেসে যুক্ত ডিফল্ট মানগুলি ব্যবহারকারীর কাছ থেকে পরিবর্তন করা যায় না, যার মানগুলি পরিবর্তন / মুছতে কোনও ব্যবহারকারী ইন্টারফেস নেই।


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

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

স্পষ্টতার জন্য ধন্যবাদ। এই মানগুলি কি আমার নিজস্ব কাস্টম টেবিল বনাম সংরক্ষণ করতে কোনও পার্থক্য রয়েছে? কেবলমাত্র একটি ধ্রুবক ভেরিয়েবলে সঞ্চয় করতে ভেরিয়েবল_সেট ব্যবহার করে? এটি কাস্টম নির্বাচনের বাক্সগুলির জন্য মূল্যগুলির একটি অ্যারে।
কমলা 13

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

কোডটির দিকে তাকিয়ে (ডি 7)। আমি কেবল হুক_ইনস্টল এবং হুক_নেবলের অনুরোধের মধ্যে কোডের 2 টি লাইন দেখতে পাই: স্থানীয় ভেরিয়েবলের আপডেট এবং ওয়াচডগের কল। সুতরাং, একটি বাস্তব ইনস্টল করার সময়, এই 2 টি হুকের মধ্যে যা পাওয়া যায় এবং নিবন্ধিত তা কী কী তা কোনও পার্থক্য নেই। পার্থক্যটি হ'ল এটি প্রথমবার ইনস্টল করুন বা কেবল মডিউলটিকে পুনরায় সক্ষম করুন।
ফাইটসারউইন

4

আমি db_query/ db_insert(ডি 6 / ডি 7) এর সাথে হুক_ইনস্টল () এ যাব।

এটি খারাপ অনুশীলন হিসাবে বিবেচনা করা হয় না (এবং কেউ আপনাকে ব্যবহার করতে বাধ্য করে না drupal_write_record())।

লোকেরা মডিউলগুলি অক্ষম ও পুনরায় সক্ষম করে তোলা অস্বাভাবিক নয় এবং সেক্ষেত্রে আপনার কোডটি hook_enable()প্রতিটি সময় ফায়ার হবে। যা ভাল না।

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