जवाबों:
यह जानकारी 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 पर जाएं । (अपने सर्वर के डोमेन नाम के साथ example.com बदलें।)
आपको "हैलो वर्ल्ड!" संदेश देखना चाहिए। बस! आपके पास पूरी तरह से hook_menu()
कार्यान्वयन है। विभिन्न प्रकार के और अधिक उन्नत विषय निम्नलिखित हैं hook_menu()
। विशेष रूप से, आप अनुमतियों के बारे में पढ़ना चाह सकते हैं, क्योंकि ऊपर का पृष्ठ किसी के द्वारा देखा जा सकेगा।
यदि आप पृष्ठ कॉलबैक में अधिक डेटा पास करना चाहते हैं, तो आप इसे प्राप्त करने के लिए पेज तर्क का उपयोग कर सकते हैं। पेज कॉलबैक पर पास करने के लिए पेज आर्ग्युमेंट का एक प्रकार का तर्क होना चाहिए। यदि पूर्णांक का उपयोग एक तर्क के रूप में किया जाता है तो यह URL के एक भाग का प्रतिनिधित्व करेगा, 0 से शुरू होकर, प्रत्येक स्लैश (/) के लिए एक बार बढ़ा हुआ। निम्नलिखित उदाहरण में, इसका मतलब है कि 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;
}
"वाइल्डकार्ड" का उपयोग URL के मनमाने डेटा को स्वीकार करने के लिए किया जा सकता है।
function helloworld_menu() {
$items['hello/%'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
);
return $items;
}
function helloworld_page($argument1) {
return $argument1;
}
हेल्लो / वर्ल्ड विजिट करना, $argument1
बराबर होगा world
।
अक्सर एक URL तर्क संख्या की पहचान करेगा, उदाहरण के लिए, एक इकाई। डुप्लिकेटिंग कोड से बचने के लिए जो इस आईडी को अपनी संबंधित वस्तु में परिवर्तित करता है, Drupal "नामित" वाइल्डकार्ड के लिए ऑटोलॉडिंग का समर्थन करता है। जब एक नामित वाइल्डकार्ड का उपयोग किया जाता है, तो Drupal वाइल्डकार्ड के समान नाम के साथ एक फ़ंक्शन की जांच करेगा _load
। यदि ऐसा कोई फ़ंक्शन पाया जाता है, तो उसे URL में मूल्य के मूल्य के साथ बुलाया जाएगा, और लोडर फ़ंक्शन द्वारा जो कुछ भी लौटाया जाएगा, वह मूल मूल्य के स्थान पर पेज कॉलबैक को दिया जाएगा। चूंकि द्रुपाल के पास पहले से ही नोड्स को लोड करने के लिए ऐसा फ़ंक्शन है 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,
सरल उदाहरण को ऊपर से देखने योग्य बनाना आवश्यक है, लेकिन यह शायद ही आदर्श है, क्योंकि यह कभी भी ऐसा नहीं होने देता है। जो भी यात्रा / हेलो की कोशिश करेगा उसे पहुँच प्रदान की जाएगी। नियंत्रण के कुछ उपाय प्रदान करने का सबसे आसान तरीका, एक एक्सेस कॉलबैक प्रदान करना है, ऊपर से पेज कॉलबैक की तरह। निम्नलिखित कोड अभी भी किसी को भी एक्सेस करने की अनुमति देता है, लेकिन यह दर्शाता है कि तर्क को किसी फ़ंक्शन को एक्सेस टाइम पर कैसे स्थानांतरित करना है, जिससे अधिक जटिल तर्क की अनुमति मिलती है।
/**
* 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;
}
चूंकि डिफ़ॉल्ट रूप से एक्सेस कॉलबैक user_access है, इसलिए इसे उपरोक्त कोड के रूप में छोड़ा जा सकता है।
hook_menu()
हुक के लिए सबसे जटिल उपयोग-मामलों के बारे में आधिकारिक दस्तावेज बहुत अधिक जानकारी प्रदान करता है।
title
संपत्ति की आवश्यकता है के लिए सभी वस्तुओं से लौटेhook_menu()