मेन्यू में लिंक जोड़ें
अब, जब हमने अपने मॉड्यूल की सेटिंग्स पेज के लिए एक प्लेसहोल्डर बना लिया है, तो चलिए एक मेन्यू लिंक जोड़ते हैं। नीचे दिए गए निर्देश दिखाते हैं कि «प्रबंधन > कॉन्फ़िगरेशन» (http://example.com/admin/config) पेज पर «डेवलपमेंट» सेक्शन में hello_world मॉड्यूल के लिए मेन्यू लिंक कैसे बनाया जाए।
अपने मॉड्यूल की रूट फोल्डर में एक नया फ़ाइल बनाएं जिसका नाम hello_world.links.menu.yml हो और इसमें निम्नलिखित जोड़ें:
hello_world.admin: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development route_name: hello_world.content weight: 100
ध्यान दें कि पहली पंक्ति नामस्थान (namespace) को आरक्षित करती है, जैसे कि हमारे रूटिंग फ़ाइल उदाहरण में। साथ ही पाँचवीं पंक्ति में हमारे route_name के उपयोग पर भी ध्यान दें (हम रूटिंग फ़ाइल उदाहरण की पहली पंक्ति से नामस्थान का उपयोग करते हैं)। शीर्षक और विवरण «डेवलपमेंट» सेक्शन में दिखाई देंगे। ध्यान दें कि parent पंक्ति मेन्यू के पैरेंट लिंक को निर्दिष्ट करती है। दूसरे शब्दों में, मेन्यू लिंक admin, config, development के अंतर्गत बनाया जाएगा।
यह hello_world.content (इस उदाहरण में hello_world.routing.yml) में परिभाषित पथ पर एक लिंक जोड़ देगा, जो आपके साइट के एडमिनिस्ट्रेशन पेज पर «कॉन्फ़िगरेशन» टैब (/admin/config) में «डेवलपमेंट» सेक्शन के अंतर्गत दिखेगा। निश्चित रूप से, परिवर्तनों को प्रभावी करने के लिए आपको कैश साफ़ करना होगा।
कैश साफ़ करने के बाद, आप «Hello मॉड्यूल सेटिंग्स» मेन्यू लिंक को कॉन्फ़िगरेशन पेज के «डेवलपमेंट» सेक्शन में पाएंगे। लिंक पर क्लिक करने से hello_world मॉड्यूल कॉल होगा।
अतिरिक्त सुझाव
.links.menu.yml फ़ाइल काफी लचीली है। आप इसे बाहरी संसाधनों या अन्य लिंक पर रीडायरेक्ट करने के लिए भी उपयोग कर सकते हैं:
hello_world.admin: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development url: http://example.com/this-is-some-example weight: 100 hello_world.admin2: title: 'Hello module settings' description: 'example of how to make an admin settings page link' parent: system.admin_config_development url: internal:/some-internal-path
संपादन योग्य नहीं:
ध्यान दें कि जब आप yml फ़ाइलों और कस्टम मॉड्यूल्स के माध्यम से मेन्यू लिंक बनाते हैं, तो आपको ऐसे मेन्यू लिंक मिलते हैं जिन्हें UI से संपादित नहीं किया जा सकता। आप केवल yml फ़ाइल के माध्यम से लिंक बदल सकते हैं। इन्हें मॉड्यूल-प्रबंधित माना जाता है, न कि प्रशासनिक। जब आप मेन्यू आइटम के लिए संपादन बटन दबाते हैं, तो आपको यह संदेश मिलता है: «यह लिंक XXX मॉड्यूल द्वारा प्रदान किया गया है। शीर्षक और पथ को संपादित नहीं किया जा सकता»।
संपादन योग्य मेन्यू लिंक बनाने के लिए, आपको इसे लगभग इस तरह करना होगा:
$my_menu = \Drupal::entityTypeManager()->getStorage('menu_link_content') ->loadByProperties(['menu_name' => 'my-menu-name']); foreach ($my_menu as $menu_item) { $parent_id = $menu_item->getParentId(); if (!empty($parent_id)) { $top_level = $parent_id; break; } } $menu_link = MenuLinkContent::create([ 'title' => 'My menu link title', 'link' => ['uri' => 'internal:/my/path'], 'menu_name' => 'my-menu-name', 'parent' => $top_level, 'expanded' => TRUE, 'weight' => 0, ]); $menu_link->save();