क्या क्षेत्रों को नोड टेम्प्लेट में मुद्रित किया जा सकता है?


25

क्या क्षेत्रों को एक नोड टेम्प्लेट के भीतर मुद्रित किया जा सकता है, या क्या वे क्षेत्र सख्ती से पेज टेम्प्लेट तक सीमित हैं?

जवाबों:


48

आप किसी भी टेम्पलेट के अंदर क्षेत्रों को प्रिंट कर सकते हैं, लेकिन वे node.tpl.phpटेम्पलेट में बॉक्स से बाहर उपलब्ध नहीं हैं । उन्हें उपलब्ध कराने के लिए, आप अपने node.tpl.phpटेम्पलेट में उपयोग के लिए एक नया चर बनाएंगे जिसमें सभी क्षेत्र सामग्री शामिल होंगी।

नए टेम्पलेट वैरिएबल बनाना एक प्रीप्रोसेस फ़ंक्शन का उपयोग करके किया जाता है। अपनी थीम की template.phpफ़ाइल में, ऐसा फ़ंक्शन बनाएं जो इस तरह दिखता है:

function mytheme_preprocess_node(&$variables) {
}

mythemeअपने विषय के संक्षिप्त नाम के साथ प्रतिस्थापित करना। अब, Drupal को इस नए प्रीप्रोसेस फ़ंक्शन को पहचानने के लिए, आपको अपनी साइट की थीम रजिस्ट्री को फिर से बनाने की आवश्यकता है। यह विन्यासविकासप्रदर्शन पर जाने और शीर्ष पर "सभी कैश साफ़ करें" बटन दबाने के समान सरल है ।

अब, प्रीप्रोसेस फ़ंक्शंस जिस तरह से काम करता है, $variablesउसमें एक सरणी होती है जो आपके टेम्पलेट के उपलब्ध चर से मेल खाती है। उदाहरण के लिए, में node.tpl.php, $submittedलेखक बाइलाइन में शामिल है। उपरोक्त प्रीप्रोसेस फ़ंक्शन में, यह पाया जाता है $variables['submitted']

यह देखने के लिए कि आपके पास क्या है page.tpl.php, जहाँ आपके पास एक सरणी $pageहै, जिसमें सभी क्षेत्र शामिल हैं, आप आबाद करना चाहते हैं $variables['page']

समस्या यह है कि $pageमें node.tpl.phpपहले से ही एक सही / गलत मूल्य देता है कि आप जानते हैं कि क्या आप अपने आप में या एक सूची में नोड पर देख रहे हैं के साथ भरा जाता है।

तो उस नाम की टक्कर से बचने के लिए, $regionइसके बजाय आबाद करें :

function mytheme_preprocess_node(&$variables) {

  // Get a list of all the regions for this theme
  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {

    // Get the content for each region and add it to the $region variable
    if ($blocks = block_get_blocks_by_region($region_key)) {
      $variables['region'][$region_key] = $blocks;
    }
    else {
      $variables['region'][$region_key] = array();
    }
  }
}

फिर, अपने विषय के node.tpl.phpखाके में, आप निम्न कार्य करके किसी भी क्षेत्र को प्रस्तुत कर सकते हैं:

<?php print render($region['sidebar_first']); ?>

sidebar_firstउस क्षेत्र का नाम कहां है जिसे आप प्रस्तुत करना चाहते हैं।


1
अंत में Drupal 7 :) के लिए एक कार्यशील समाधान
एडुआर्ड लुका

4
वहाँ भी एक त्वरित 'एन' गंदा समाधान है कि मेरे लिए काम किया है <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>। यहाँ से: webomelette.com/add-region-node-template
Enright

यह समाधान निफ्टी है। क्या आप उदाहरण दे सकते हैं कि जब यह पृष्ठ.tpl.php में होने के बजाय नोड के भीतर क्षेत्रों को प्रिंट करने के लिए सबसे अधिक लागू होता है।
रेंडेल

यह आपके डिजाइन पर निर्भर करता है। कभी-कभी लेआउट साइडबार को ऐसी जगह पर रख सकता है, जहां यह थीम के लिए बहुत आसान है यदि यह इसके बाहर नोड नोड के अंदर था।
रॉबी

उपयुक्त क्षेत्र रैपर के बारे में मत भूलना! संदर्भ के लिए system_page_alter () देखें । याद रखें कि block_get_blocks_by_region()केवल ब्लॉक की सरणी देता है और यदि आप इसे एक क्षेत्र के रूप में प्रस्तुत करना चाहते हैं, तो आपको क्षेत्र आवरण जोड़ने की आवश्यकता है।
सिलिकॉनमाइंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.