जवाबों:
आप किसी भी टेम्पलेट के अंदर क्षेत्रों को प्रिंट कर सकते हैं, लेकिन वे 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उस क्षेत्र का नाम कहां है जिसे आप प्रस्तुत करना चाहते हैं।
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>। यहाँ से: webomelette.com/add-region-node-template
block_get_blocks_by_region()केवल ब्लॉक की सरणी देता है और यदि आप इसे एक क्षेत्र के रूप में प्रस्तुत करना चाहते हैं, तो आपको क्षेत्र आवरण जोड़ने की आवश्यकता है।