উত্তর:
এই তথ্যটি বৈধ Drupal এর 6 ও 7. Drupal এর 8 জন্য, hook_menu()
দ্বারা প্রতিস্থাপিত হয়েছে নতুন রাউটিং সিস্টেম । নীচে আমরা hook_menu()
তিনটি সহজ পদক্ষেপে প্রয়োগ করি ।
খালি মডিউলটি কীভাবে তৈরি করা যায় তার নির্দেশাবলী অনুসরণ করে একটি খালি মডিউল তৈরি করুন । এখানে প্রদর্শিত কোডটিতে, ধরে নেওয়া হয়েছে মডিউলটির নাম হেলোরওর্ল্ড ।
মডিউল ফাইলটিতে নিম্নলিখিত কোড যুক্ত করুন।
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'title' => 'Hello world!',
'page callback' => 'helloworld_page',
'access callback' => TRUE,
);
return $items;
}
/**
* Page callback for /hello.
*/
function helloworld_page() {
return 'Hello world!';
}
মডিউলটি সক্ষম করুন এবং http://example.com/hello দেখুন । (উদাহরণস্বরূপ.কমকে আপনার সার্ভারের ডোমেন নাম দিয়ে প্রতিস্থাপন করুন))
আপনার "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখতে পাওয়া উচিত। এটাই! আপনার পুরোপুরি কার্যকরী hook_menu()
বাস্তবায়ন রয়েছে। নিম্নলিখিত আরও বিভিন্ন উন্নত বিষয় সম্পর্কিত hook_menu()
। বিশেষত, আপনি অনুমতিগুলি সম্পর্কে পড়তে চাইতে পারেন, কারণ উপরের পৃষ্ঠাটি যে কেউ দেখতে পাবে।
আপনি যদি পেজ কলব্যাকের আরও ডেটা পাস করতে চান তবে এটি অর্জনের জন্য আপনি পৃষ্ঠা আর্গুমেন্ট ব্যবহার করতে পারেন। পেজ কলব্যাকটি প্রেরণ করার জন্য পৃষ্ঠা আর্গুমেন্টগুলি আর্গুমেন্টের একটি অ্যারে হওয়া উচিত। যদি কোনও পূর্ণসংখ্যাটি আর্গুমেন্ট হিসাবে ব্যবহৃত হয় তবে এটি 0 থেকে শুরু করে প্রতিটি স্ল্যাশ (/) এর জন্য একবার বাড়ানো URL এর একটি অংশকে উপস্থাপন করবে। নিম্নলিখিত উদাহরণে, এর অর্থ 0 টি 'হ্যালো' তে পরিণত হবে।
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(0),
);
return $items;
}
function helloworld_page($argument1) {
return $argument1;
}
স্ট্রিংগুলি ভারব্যাটিমে প্রেরণ করা হবে, সুতরাং আবার বের array(0, 'world')
হওয়ার জন্য ব্যবহার করা যেতে পারে hello world
।
function helloworld_page($argument1, $argument2) {
return $argument1 . ' ' . $argument2;
}
"ওয়াইল্ডকার্ডস" ইউআরএল থেকে স্বেচ্ছাসেবী ডেটা গ্রহণ করতে ব্যবহার করা যেতে পারে।
function helloworld_menu() {
$items['hello/%'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
);
return $items;
}
function helloworld_page($argument1) {
return $argument1;
}
হ্যালো / বিশ্ব দেখা, $argument1
সমান হবে world
।
প্রায়শই একটি ইউআরএল যুক্তি হ'ল নম্বর শনাক্তকরণ, উদাহরণস্বরূপ, একটি সত্তা। সদৃশ কোডটি এড়ানোর জন্য যা এই আইডিটিকে তার সংশ্লিষ্ট আইটে রূপান্তরিত করে, ড্রুপাল "নামকরণ" ওয়াইল্ডকার্ডগুলির জন্য অটোলয়েড সমর্থন করে। যখন একটি নামে ওয়াইল্ডকার্ড ব্যবহার করা হয়, Drupal এর ওয়াইল্ডকার্ড দ্বারা suffixed নামেই একটি ফাংশন জন্য চেক করবে _load
। যদি এই জাতীয় কোনও ফাংশন পাওয়া যায়, তবে এটি ইউআরএল এর মানটির সাথে ডাকা হবে এবং লোডার ফাংশন দ্বারা যা কিছু ফিরিয়ে দেওয়া হবে তা মূল মানের পরিবর্তে পৃষ্ঠা কলব্যাকে পাঠানো হবে। যেহেতু দ্রুপালের নোডগুলি লোড করার জন্য ইতিমধ্যে এ জাতীয় ফাংশন রয়েছে node_load()
, তাই আমরা নোডগুলি অটোলাজেড এবং পৃষ্ঠা কলব্যাকে যেতে পারি।
function helloworld_menu() {
$items['hello/%node'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
);
return $items;
}
function helloworld_page($node) {
return t('Hello node (ID = !nid)', array('!nid' => $node->nid));
}
কখনও কখনও, একাধিক যুক্তির ভিত্তিতে আরও বেশি স্বয়ংক্রিয়-লোড করা প্রয়োজন। যেহেতু কেবলমাত্র নামযুক্ত যুক্তিটি ডিফল্টরূপে লোডারকে দেওয়া হয়, তাই দ্রুপালকে স্পষ্ট করে বলতে হবে কোন অতিরিক্ত লোড আর্গুমেন্টটি লোডারকে দেওয়া উচিত। উদাহরণস্বরূপ, নোডের একটি নির্দিষ্ট সংশোধন লোড করার জন্য node_load()
নোড আইডি এবং একটি সংশোধন আইডিতে পাস করা প্রয়োজন । যা নিম্নলিখিত কোড দ্বারা সম্পন্ন করা যেতে পারে।
function helloworld_menu() {
$items['hello/%node/revision/%'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
'load arguments' => array(3),
);
return $items;
}
function helloworld_page($node) {
return t('Hello node (ID = !nid, revision ID = !rid)', array('!nid' => $node->nid, '!rid' => $node->vid));
}
'access callback' => TRUE,
উপরের সাধারণ উদাহরণটি একেবারে দেখার জন্য প্রয়োজনীয়, তবে এটি খুব কমই আদর্শ, কারণ এটি এখন পর্যন্ত কোনও নিয়ন্ত্রণ করতে দেয় না। যে কেউ / হ্যালো দেখার চেষ্টা করে তাকে অ্যাক্সেস দেওয়া হবে granted নিয়ন্ত্রণের কিছু পরিমাপ সরবরাহের সবচেয়ে সহজ উপায় হ'ল অ্যাক্সেস কলব্যাক সরবরাহ করা, এটি উপরের পৃষ্ঠা কলব্যাকের মতো much নিম্নলিখিত কোডটি এখনও কারও অ্যাক্সেসের অনুমতি দেয়, তবে কীভাবে যুক্তিকে অ্যাক্সেসের সময় বলা একটি ফাংশনে স্থানান্তরিত করা যায় তা দেখায়, যার ফলে আরও জটিল যুক্তিকে মঞ্জুরি দেওয়া হয়।
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'access callback' => 'helloworld_access',
);
return $items;
}
/**
* Access callback for /hello.
*/
function helloworld_access() {
return TRUE;
}
এটি অগত্যা সর্বোত্তম উপায় নয়, কারণ একটি কাস্টম ফাংশনটি ব্যবহার করা অযথা অকারণে নকল কোডটি হয়ে যায়। বেশিরভাগ সময় ব্যবহারের জন্য আরও ভাল উপায় হবে user_access()
। একসাথে অ্যাক্সেস কলব্যাক অ্যাক্সেস আর্গুমেন্ট সেট করা সম্ভব। নিম্নলিখিত কোডের সাহায্যে অ্যাক্সেস ব্যবহারকারী প্রোফাইলের অনুমতি সহ ব্যবহারকারীদের থেকে পৃষ্ঠাটি দেখারযোগ্য হওয়া সম্ভব ।
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'access callback' => 'user_access',
'access arguments' => array('access user profiles'),
);
return $items;
}
যেহেতু ডিফল্টরূপে অ্যাক্সেস কলব্যাকটি ব্যবহারকারীর_অ্যাক্সেস, তাই উপরের কোডের মতো এটি বাদ দেওয়া যেতে পারে।
অফিসিয়াল hook_menu()
ডকুমেন্টেশন হুকের জন্য সবচেয়ে জটিল ব্যবহারের ক্ষেত্রে অনেক বেশি তথ্য সরবরাহ করে।
title
সম্পত্তিটি সমস্ত আইটেম থেকে ফিরে আসতে হবেhook_menu()