2010-07-13 7 views
5

मुझे उपयोगकर्ता के आधार पर मेनू लिंक या एक ही आइटम नाम छोड़ने की आवश्यकता है) उपयोगकर्ता के अतिथि, या प्रमाणित उपयोगकर्ता है।मेनू लिंक बदलना, यदि उपयोगकर्ता प्रमाणीकृत है या नहीं

ऐसा करने का मानक तरीका क्या है?

धन्यवाद

उत्तर

5

आप गतिशील रूप से, एक मेनू आइटम के पथ को बदल नहीं सकते क्योंकि मेनू आइटम कैश नहीं किया जाता।

फिर भी, AFAIK, आप जो चाहते हैं उसे प्राप्त करने के दो तरीके हैं। दोनों विधियों के लिए आपको एक कस्टम मॉड्यूल (मेनू UI से नहीं) में hook_menu के साथ अपने मेनू आइटम बनाने की आवश्यकता होती है।

पहला तरीका समान नामों के साथ दो मेनू आइटम बनाना और एक्सेस नियम सेट करना है ताकि कोई केवल लॉग इन अतिथियों के लिए उपलब्ध हो, दूसरा प्रमाणीकृत उपयोगकर्ताओं के लिए उपलब्ध हो। चूंकि ड्रूपल केवल उन मेनू आइटमों को दिखाएगा जिन्हें उपयोगकर्ता को एक्सेस करने की अनुमति है, केवल किसी भी समय किसी एक को दिखाया जाएगा। ड्रूपल कोर में, आप देख सकते हैं कि उपयोगकर्ता मॉड्यूल में /user/login पथ को देखकर अज्ञात उपयोगकर्ताओं के लिए मेनू आइटम कैसे बनाता है।

दूसरी विधि एक मेनू आइटम बनाने और उपयोगकर्ता कॉलबैक में मेनू कॉलबैक में जांचना है, यदि उपयोगकर्ता लॉग इन है। यदि उपयोगकर्ता लॉग इन है, तो आप एक पृष्ठ परोसते हैं, अगर आप किसी अन्य की सेवा नहीं करते हैं। Drupal कोर में, /user पथ इस तरह काम करता है। कोड कैसे काम करता है यह देखने के लिए user_page देखें। लिंक फेरबदल की

+0

मैं वास्तव में मेनू से जुड़े बिना सही पृष्ठ पर उपयोगकर्ता पुनः निर्देशित द्वारा हल किया गया है। – aneuryzm

+1

यह देखने के लिए अच्छा है कि आपने इसे हल किया है, लेकिन अगर मैं पूछ सकता हूं: आपने कोड को कहां रखा है जो आगंतुक को सही यूआरएल पर रीडायरेक्ट करता है? यदि आप किसी नोड में PHP डालते हैं, तो मैं आपको यह लेख दिखाना चाहता हूं (http://2bits.com/articles/free-your-content-php-moving-php-code-out-blocks-views-and-nodes .html) क्योंकि उस तकनीक के कुछ नुकसान हैं। – marcvangend

+0

PHP इनपुट प्रारूप का उपयोग करके नोड बनाना केवल अस्थायी समाधान के रूप में उपयोग किया जाना चाहिए। Drupal.org पर भी, सभी पृष्ठों को गतिशील आउटपुट की आवश्यकता होती है जो एक कस्टम मॉड्यूल (drupalorg.module) द्वारा उत्पन्न होते हैं जिसमें Drupal.org के लिए आवश्यक सभी अनुकूलन शामिल होते हैं। – kiamlaluno

2

इसके बजाय, आप menues दो बार बनाने coudl: एक बार नियमित रूप से उपयोगकर्ताओं के लिए और एक बार पंजीकृत/व्यवस्थापक के लिए लिंक के साथ लिंक के साथ/... उन

आप एक ब्लॉक में एक मेनू डाल सकते हैं और इसे केवल पंजीकृत उपयोगकर्ताओं को एक ब्लॉक और गैर-पंजीकृत उपयोगकर्ताओं को अन्य ब्लॉक देखने की अनुमति देने के लिए सेट करें। या तो ब्लॉक निर्माण फ़ॉर्म के भीतर या PHP के माध्यम से ड्रूपल मेनू से उचित रेडियो बटन का चयन करके जो इसका मूल्यांकन मूल्य (TRUE/FALSE) का मूल्यांकन करेगा और उसके आधार पर प्रदर्शित करेगा। मैं पहले दृष्टिकोण के साथ जाने का सुझाव देता हूं।

0

आप नोडैकैस मॉड्यूल के संयोजन और संबंधित पृष्ठों से लिंक करके मेनू बदल सकते हैं।

उदाहरण के लिए, डिफ़ॉल्ट अतिथि उपयोगकर्ता एक्सेस/लॉगआउट तक नहीं पहुंच सकते हैं। यदि आप लॉगआउट करने के लिए मेनू में कोई लिंक बनाते हैं, तो यह केवल तभी प्रदर्शित होगा जब कोई उपयोगकर्ता लॉग इन हो। नोडैकैस के साथ, बस नोड बनाएं, अनुदान टैब पर जाएं और उस नोड के लिए "प्रमाणीकृत उपयोगकर्ता" या "अज्ञात उपयोगकर्ता" को अनचेक/चेक करें ।

http://drupal.org/project/nodeaccess

चीयर्स,

4

आप गतिशील रूप से एक मेनू आइटम के पथ बदल सकते हैं - hook_translated_menu_link_alter देखते हैं।

प्रत्येक हुक आइटम को प्रस्तुत करने से पहले इस हुक को कॉल किया जाता है अगर इसमें संपत्ति ['विकल्प'] ['alter'] = TRUE है।

आप hook_menu_link_alter का उपयोग कर इस आइटम को मेनू आइटम में सेट कर सकते हैं।

उदाहरण कोड होगा:

function MY_MODULE_menu_link_alter(&$item) { 
    $item['options']['alter'] = TRUE; 
} 

function MY_MODULE_translated_menu_link_alter(&$item, $map) { 
    if($item['mlid']==89) { 
     $item['link_path'] .= 'my-new-path'; 
    } 
} 
संबंधित मुद्दे