मैं मेन्यू रिलेशनशिप के आधार पर चाइल्ड नोड्स का दृश्य कैसे बना सकता हूं?


17

मान लें कि आपके पास मेनू ट्री में निम्नलिखित पृष्ठ हैं:

  • परियोजनाओं
    • प्रोजेक्ट वन
    • प्रोजेक्ट दो
    • प्रोजेक्ट थ्री

मैं एक ऐसा दृश्य बनाने का मार्ग खोज रहा हूँ जो प्रोजेक्ट (मूल) पृष्ठ में सन्निहित होगा जो बाल पृष्ठों से एक चित्र, शीर्षक और पाठ (सारांश) दिखाएगा।

मेनू ट्री में माता-पिता और बच्चों के बीच संबंध को परिभाषित किया गया है।

मुझे पता है कि मैं नोड संदर्भ का उपयोग कर सकता हूं, लेकिन इसका मतलब यह होगा कि हर बार जब कोई व्यक्ति एक पेज बनाता है तो उन्हें मेनू संबंध और फिर नोड संदर्भ संबंध को परिभाषित करना होगा।

मुझे यह भी पता है कि मैं एक और सामग्री-प्रकार बना सकता हूं, लेकिन मुझे लगता है कि यह ओवरकिल है क्योंकि सभी सामग्री पृष्ठ समान दिखते हैं।


1
नोड्स के बीच कोई सीधा संबंध नहीं है जो किसी अन्य नोड के सबमेनू में प्रदर्शित होते हैं (मेनू लिंक और नोड के बीच एकमात्र कनेक्शन यह है कि मेनू लिंक नोड / एनआईडी को इंगित करता है)। तो आपको इन उप-नोड्स को एक साथ जोड़ने के लिए कुछ (और माता-पिता-नोड के लिए) की आवश्यकता है, एक सामान्य वर्गीकरण शब्द, book.module, हो सकता है ...
Berdir

जवाबों:


4

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


16

आप मेनू नोड एपीआई और मेनू नोड दृश्य मॉड्यूल का उपयोग करके बिल्कुल ऐसा कर सकते हैं ।

अपने आवश्यक सामग्री प्रकार के साथ एक दृश्य बनाएं, और "मेनू: मेनू लिंक आईडी" का एक प्रासंगिक फिल्टर चुनें (यह केवल ऊपर स्थापित मॉड्यूल के साथ उपलब्ध है)।

के तहत, "जब फ़िल्टर मान उपलब्ध नहीं होता है," "डिफ़ॉल्ट मान प्रदान करें" चुनें और "PHP कोड" चुनें।

निम्नलिखित स्निपेट यह करेगा, तो आप सिर्फ एक ब्लॉक को दृश्य से बाहर निकालेंगे और आप वहां हैं:

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}

3
मुझे लगता है कि मौजूदा नोड के बच्चों को लेने के लिए फिल्टर "मेनू: पैरेंट मेनू लिंक आईडी" होना चाहिए। और तर्क कोड हो सकता है: $ current = end (menu_get_active_trail ()); $ $ वापस करें ['mlid'];
स्टीफन

इसके लिए धन्यवाद। कुछ सुधार (@ स्टीफन के सुधार के अलावा)। 1) आप कुछ खर्च बचाने menu_load_object(arg(1))के node_load()लिए उपयोग कर सकते हैं । 2) आपको यह सुनिश्चित करने के लिए जांचना चाहिए कि आपके द्वारा संबंधित मेनू से मेनू आइटम है। अभी, आप पहले लौट रहे हैं $mlid। फ़ॉर्च के अंदर आपको इसे if ($data->menu_name == 'my-menu')ठीक करने के लिए एक सशर्त जोड़ना चाहिए । और 3) आप menu: hiddenकेवल छुपी हुई वस्तुओं को वापस करने के लिए एक दूसरा फ़िल्टर जोड़ना चाहते हैं जो छिपा नहीं है। उसी स्निपेट का उपयोग करें, लेकिन $data->hidden;इसके बजाय वापस लौटें $mlid
एडम बालसम

2
मैं दृढ़ता से सुझाव देने वाले मॉड्यूल को हतोत्साहित करूंगा जो अभी भी विकास के चरण में हैं।
Ambidex

@ सभी बच्चों को किसी भी स्तर पर प्राप्त करने के लिए क्या है? पहले के बजाय।
एली स्टोन

4

नोड पदानुक्रम मॉड्यूल संबंध के इस प्रकार है, साथ ही एक बार देखा गया एकीकरण प्रदान करने की अनुमति देता है।

नोड हायरार्की सामग्री के पेड़-समान पदानुक्रम बनाने वाले अन्य नोड्स के बच्चे होने की अनुमति देता है। मॉड्यूल प्रदान करता है:

  • 1-पदानुक्रमित मेनू के निर्माण पर क्लिक करें
  • पदानुक्रमित ब्रेडक्रंब
  • पथारूटो (और टोकन मॉड्यूल) का उपयोग कर स्वचालित पदानुक्रमिक url

    (उदाहरण: q = aboutus / इतिहास / शुरुआत)।

  • यदि वांछित है तो पदानुक्रमित मेनू का स्वचालित निर्माण।
  • वैकल्पिक दृश्य एकीकरण।
  • वैकल्पिक नोड एक्सेस एकीकरण।

2

हो सकता है कि यह D7 / Views 3 के लिए बदल गया हो, लेकिन वांछित व्यवहार को पूरा करने के लिए आपको किसी भी PHP की आवश्यकता नहीं है:

  1. menu_views , menu_node और menu_node_views मॉड्यूल स्थापित करें ।
  2. "मेनू ट्री" प्रकार का एक नया दृश्य बनाएं
  3. फ़ील्ड जोड़ें "मेनू: लिंक शीर्षक" और "मेनू: विवरण"
  4. प्रासंगिक फ़िल्टर / तर्क जोड़ें "मेनू: नोड आईडी"; डिफ़ॉल्ट मूल्य "URL से सामग्री आईडी" प्रदान करें
  5. संबंध जोड़ें "मेनू: मूल मेनू लिंक आईडी"

देखा। यह काम नहीं करना चाहिए , लेकिन यह करता है।

यह सिर्फ नोड्स के साथ ठीक काम करता है, लेकिन नोड पदानुक्रम पर मेनू लिंक का उपयोग करने का लाभ यह है कि आप नोड्स के आसपास नेविगेशन बनाने तक सीमित नहीं हैं। आप अपने विचार में बाहरी लिंक भी शामिल कर सकते हैं।


नोड लिंक को उजागर करने के लिए यह एक अच्छा विकल्प है (और मुझे यह पसंद है कि हारून बॉमन ने इस नमूना दृश्य को आयात करने के लिए रखा: pastebin.com/u2GjmWG7 )। हालाँकि, मुझे देखने के लिए नोड फ़ील्ड उपलब्ध कराने में कुछ परेशानी हुई, क्योंकि ओपी अनुरोध कर रहा था। वह कैसे पूरा होता है?
डबल

आपको "मेनू: नोड आईडी" से एक संबंध जोड़कर नोड क्षेत्रों को उजागर करने में सक्षम होना चाहिए। क्या आपको ऐसा कुछ दिखाई देता है?
अनारोनबूमन

2

अपेक्षाकृत नया मॉड्यूल दृश्य मेनू नोड बच्चे फ़िल्टर है जो वास्तव में आप चाहते हैं कि क्या लगता है:

यह मॉड्यूल दृश्य के लिए एक प्रासंगिक फ़िल्टर जोड़ता है जो एक मेनू की संरचना के अनुसार नोड के बच्चे के नोड्स को पुनः प्राप्त करेगा।


0

क्या आपने इस उद्देश्य के लिए नोड संदर्भ का उपयोग करने पर विचार किया है ?

  1. आप जिस सामग्री को प्रदर्शित करना चाहते हैं, उसके लिए एक नोड संदर्भ फ़ील्ड प्रदान करें।
  2. दृश्य (डिफ़ॉल्ट मान: url से सामग्री आईडी ) में संदर्भ फ़ील्ड के रूप में उस फ़ील्ड का उपयोग करें ।
  3. इस दृश्य प्रदर्शन को सामग्री के ब्लॉक के रूप में जोड़ें। जिस नोड में इसे प्रदर्शित किया जा रहा है वह नोड्स के माता-पिता के रूप में देखा जाएगा जो उदाहरण के लिए इसका संदर्भ देते हैं।

इस प्रकार आप एक समान परिणाम प्राप्त कर सकते हैं जैसा कि आप शायद देख रहे हैं।


0

एमिल का उत्तर सही है, लेकिन मुझे " मेनू: पैरेंट मेन्यू लिंक आईडी " के एक प्रासंगिक फिल्टर में उल्लिखित PHP कोड पेस्ट करना था ।

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}

0

यदि आप इकाई अनुवाद का उपयोग करते हैं और नोड विभिन्न मेनू से जुड़ा हुआ है, तो यहां कोड का एक अनुकूलन है जो वर्तमान भाषा पर फ़िल्टर करता है। आपको अपने कोड के संदर्भ में फ़िल्टर (पैरेंट मेन्यू लिंक आईडी) के लिए PHP कोड के रूप में कॉपी करना होगा, जैसे कि अन्य उत्तरों में समझाया गया है

 if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
  foreach ($node->menu_node_links as $mlid => $data) {  
    if ($lang == $data->language) {
      return($mlid);
    }
  }
}
  }

0

मेनू नोड दृश्य की समस्या कतार से हमारे पास यह अच्छा समाधान है:

  • 'मूल मेनू लिंक आईडी' के साथ एक प्रासंगिक फ़िल्टर जोड़ें,
  • 'डिफ़ॉल्ट मान प्रदान करें' चुनें
  • 'कस्टम php कोड' चुनें
  • निम्नलिखित कोड दर्ज करें

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.