ড্রুপাল 7 বা ততোধিক ক্ষেত্রে , ড্রুপাল_স্ট্যাটিক () এর সাথে পরিচালিত একটি স্ট্যাটিক ভেরিয়েবল ব্যবহার করুন ।
drupal_static()
স্ট্যাটিক ভেরিয়েবলের জন্য কেন্দ্রীয় স্টোরেজ পরিচালনা করে এমন একটি ফাংশন। মূলশব্দ ব্যবহার করে ঘোষিত ভেরিয়েবলগুলির থেকে পৃথকভাবে static
, স্ট্যান্ডিক ভেরিয়েবলগুলি হ্যান্ডল drupal_static()
করে প্রতিটি ফাংশন থেকে অ্যাক্সেসযোগ্য; এটি সম্ভব কারণ কারণ drupal_static()
প্রতিটি ফাংশনকে এটিকে পরিবর্তন করার অনুমতি দিয়ে রেফারেন্সের মাধ্যমে ভেরিয়েবলের সামগ্রীটি প্রদান করে।
মনে করুন যে আপনাকে একটি মেনু হ্যান্ডলার এবং হুক_ব্লক_ভিউ () প্রয়োগকরণের মধ্যে একটি মান পাস করতে হবে ; আপনি নিম্নলিখিত কোড ব্যবহার করতে পারে।
function mymodule_menu() {
return array('path/%' => array(
'page callback' => 'mymodule_callback_function',
'page arguments' => array(1),
));
}
function mymodule_callback_function($data) {
$data_passer = &drupal_static('mymodule_block_data');
$data_passer = $data;
// Other logic specific to this page callback.
}
function mymodule_block_view($delta = '') {
// $data_passer will now contain the value of $data, from above.
$data_passer = &drupal_static('mymodule_block_data');
// Change the block content basing on the content of $data_passer.
}
যে ক্ষেত্রে ডেটা আরও ঘন ঘন অ্যাক্সেস করা দরকার, আপনার একটি স্থিতিশীল স্থানীয় পরিবর্তনশীল ব্যবহার করা উচিত যা থেকে ফিরে আসা মান থাকবে drupal_static()
। যেহেতু স্থিতিশীল ভেরিয়েবলগুলি কেবল আক্ষরিক মান থেকে আরম্ভ করা যেতে পারে এবং স্থির ভেরিয়েবলগুলি রেফারেন্সগুলিতে বরাদ্দ করা যায় না , কেবলমাত্র কার্যকরী কোড নিম্নলিখিতগুলির মতো। (এই কোডটি ব্যবহারকারী_অ্যাক্সেস () থেকে নেওয়া হয়েছে ) )
// Use the advanced drupal_static() pattern, since this is called very often.
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['perm'] = &drupal_static(__FUNCTION__);
}
$perm = &$drupal_static_fast['perm'];
প্রত্যাবর্তিত মানটি drupal_static()
প্রতিবারই ড্রুপাল বুটস্ট্র্যাপ পুনরায় সেট করা হয়; আপনার যদি এমন কোনও মান প্রয়োজন হয় যা বিভিন্ন পৃষ্ঠাগুলির মধ্যে সংরক্ষিত থাকে, তবে আপনাকে মানটি সংরক্ষণ করতে ডাটাবেস টেবিল ব্যবহার করতে হবে বা ভেরিয়েবল_জেট () / ভ্যারিয়েবল_সেট () ব্যবহার করতে হবে ।
ড্রুপাল 6 কার্যকর করে না drupal_static()
, তবে আপনি নিজের কোডটি নিজের মডিউলে সংজ্ঞায়িত কোনও ফাংশনে কোডটি অনুলিপি করতে পারেন।
function &mymodule_static($name, $default_value = NULL, $reset = FALSE) {
static $data = array(), $default = array();
// First check if dealing with a previously defined static variable.
if (isset($data[$name]) || array_key_exists($name, $data)) {
// Non-NULL $name and both $data[$name] and $default[$name] statics exist.
if ($reset) {
// Reset pre-existing static variable to its default value.
$data[$name] = $default[$name];
}
return $data[$name];
}
// Neither $data[$name] nor $default[$name] static variables exist.
if (isset($name)) {
if ($reset) {
// Reset was called before a default is set and yet a variable must be
// returned.
return $data;
}
// First call with new non-NULL $name. Initialize a new static variable.
$default[$name] = $data[$name] = $default_value;
return $data[$name];
}
// Reset all: ($name == NULL). This needs to be done one at a time so that
// references returned by earlier invocations of drupal_static() also get
// reset.
foreach ($default as $name => $value) {
$data[$name] = $value;
}
// As the function returns a reference, the return should always be a
// variable.
return $data;
}
drupal_static()
(বা আপনার মডিউলে সংজ্ঞায়িত ব্যাক পোর্টড ফাংশন) দিয়ে স্ট্যাটিক ভেরিয়েবল ব্যবহার করার আগে আপনার এই বিবেচনাগুলি মাথায় রাখা উচিত:
- স্ট্যাটিক ভেরিয়েবল সেট করে এমন কোডটি কোডটির আগে তার মান পাওয়ার জন্য কোডটি চালিত হয়; যদি মৃত্যুদন্ড কার্যকর করার আদেশটি চিন্তিত না হয় তবে কোডটি কাজ করে না। যখন দ্রুপাল ডকুমেন্টেশনে ফাঁসির আদেশটি স্পষ্টভাবে সংজ্ঞায়িত করা হয় না, তখন ড্রুপালের ভবিষ্যতের সংস্করণগুলিতে ক্রমটি পরিবর্তনের ঝুঁকি থাকে; কার্যকর করা আদেশটি ড্রপাল সংস্করণে পরিবর্তিত হয় না যার জন্য আপনি আপনার কোডটি প্রয়োগ করছেন।
- দ্রুপাল বিভিন্ন হুকের মধ্যে ডেটা ভাগ করার একটি প্রক্রিয়া প্রয়োগ করতে পারত। উদাহরণস্বরূপ, hook_for_alter () এর বিভিন্ন প্রয়োগের ক্ষেত্রে , প্রতিটি
hook_form_alter()
বাস্তবায়ন ব্যবহার করে অন্যান্য বাস্তবায়নের সাথে ডেটা ভাগ করতে পারে $form_state
; একইভাবে, ফর্ম বৈধকরণ হ্যান্ডলারগুলি এবং ফর্ম জমা হ্যান্ডলারগুলি, $form_state
রেফারেন্স দ্বারা পাস হওয়া পরামিতি ব্যবহার করে ডেটা ভাগ করতে পারে । আপনার নিজস্ব কোড প্রয়োগ করার আগে, নির্দিষ্ট ক্ষেত্রে দ্রুপাল দ্বারা ইতিমধ্যে প্রয়োগ করা একটি পৃথক প্রক্রিয়া ব্যবহার করে ডেটা ভাগ করা সম্ভব কিনা তা যাচাই করুন।