HTML.tpl.php में मुद्रण क्षेत्र


10

मुझे html.tpl.php टेम्प्लेट में कुछ क्षेत्रों को आउटपुट करने की आवश्यकता है क्योंकि ये page.tpl.php और पेज-front.tpl.php (केवल दो का नाम) के बीच नहीं बदलते हैं। मूल रूप से मैं कोड दोहराव से बचना चाहता हूं।

हालांकि html.tpl.php में क्षेत्रों के साथ कुछ भी जुड़ा हुआ नहीं लगता है, और न ही मैं ड्रुपल_गेट_ग्रेयन_ कॉन्टेंट (दोनों मापदंडों के साथ और इसके बिना बस खाली सरणी देता है) का उपयोग करके कुछ भी प्राप्त नहीं कर सकता।

विचार?


क्या आपने drupal_set_region_content()क्षेत्र सामग्री सेट करने के लिए उपयोग किया है?
kiamlaluno

2
ऐसा कोई समारोह नहीं है। हो सकता है कि आपका मतलब हो drupal_add_region_content()लेकिन मुझे इसमें कोई मतलब नहीं दिख रहा है: मैंने क्षेत्रों की सामग्री को ब्लॉक व्यवस्थापक इंटरफ़ेस के माध्यम से सेट किया है।
मोरफ्यू 5

1
हां, मेरा मतलब था drupal_add_region_content()
kiamlaluno

जवाबों:


18

मैंने इस तरह हल किया:

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

और फिर मैं कर सकता था

<?php print render($region_name) ?>

इको का उपयोग क्यों करें? बेशक यह काम करता है।
SDMulroy

यकीन है, अगर मैं एक मॉड्यूल या सार्वजनिक विषय को लागू कर रहा था, तो मैं सामुदायिक मानकों का पालन करने के लिए मजबूर हो जाऊंगा। यह एक कस्टम थीम थी जिसका उपयोग मेरे ग्राहक द्वारा विशेष रूप से किया जा रहा था।
मोरफियू 5

मुझे पता है कि यह एक बहुत पुरानी पोस्ट है, लेकिन मुझे लगता है कि यह एक उत्तर को स्वीकार करने के लिए खराब निर्णय है जहां उत्तर का लेखक आलसी सवाल का जवाब देता है। उदाहरण के लिए, आप जोड़ने के लिए एक फ़ंक्शन प्रदान करते हैं, लेकिन यह मानते हैं कि सभी पाठक जादुई रूप से यह जान पाएंगे कि यह कोड कहाँ रहना चाहिए। यह आलसी हिस्सा है और मैं इसे नीचे मतदान कर रहा हूं क्योंकि यह नौसिखिया ड्रुपल उपयोगकर्ताओं / देवों को कुछ भी प्रदान नहीं कर रहा है।
स्किटल्स

मैं आपके इनपुट की सराहना करता हूं, और यह तथ्य कि नौसिखियों को पूर्ण स्पष्टीकरण नहीं मिल रहा है। हालांकि, कृपया विचार करें कि) क) स्तनपान आलसी नौसिखियों के लिए बनाता है, और ख) किसी को भी, जिसने डॉक्स को तेजी से पढ़ा है (जैसा कि किसी गैर-आलसी नौसिखिए के पास होना चाहिए) उस फ़ंक्शन का प्लेसमेंट अपेक्षाकृत स्पष्ट होना चाहिए। यदि ऐसा नहीं है, तो एक अच्छे कारण के लिए एक मैनुअल है। मेरा प्रश्न (और उत्तर) एक स्तर पर एक मुद्दे से संबंधित है जहां ड्रुपल थीमिंग का एक निश्चित बुनियादी ज्ञान ग्रहण किया जा सकता है। इसके अलावा, यह एक क्यू एंड ए साइट है, डॉक्स साइट अगले दरवाजे है।
मॉर्फ्यू 5

1
@Skitties हम यहाँ प्रलेखन की केवल इसलिए नकल नहीं कर सकते हैं क्योंकि नए उपयोगकर्ता यह नहीं जान सकते हैं कि प्रश्न में दिखाए गए जैसे पूर्वप्रक्रिया क्या हैं। यह सवाल का हिस्सा भी नहीं है। यदि उपयोगकर्ताओं के पास एक विशिष्ट प्रश्न abput प्रीप्रोसेस कार्य है, तो वे एक नया प्रश्न पूछेंगे।
kiamlaluno

2

drupal_get_region_content()पिछली कॉल के साथ सेट की गई सामग्री लौटाती है drupal_add_region_content(), लेकिन इसमें ब्लॉक की सामग्री शामिल नहीं है, जो ब्लॉक में पेज_बनाएँ () के माध्यम से प्रदान की जाती है ।

यदि आप Drupal source कोड में "drupal_add_region_content" खोजते हैं, तो आप देखेंगे कि फ़ंक्शन इसे कहते हैं:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

आप प्रशासनिक पृष्ठ में ब्लॉक के लिए जो सेट करते हैं वह उन क्षेत्रों में है जहां ब्लॉक प्रदान किए जाएंगे, लेकिन उनकी सामग्री के साथ जोड़ा नहीं गया है drupal_add_region_content(); वास्तव में, ऊपर सूचीबद्ध कार्यों में से कोई भी (जो केवल कार्य कॉलिंग हैं drupal_add_region_content(), एक ड्रुपल इंस्टॉलेशन के परीक्षण के लिए कोड को छोड़कर) ब्लॉक सामग्री को प्रस्तुत करने / जोड़ने के लिए है।

यदि आपको अपने स्वयं के कोड में ब्लॉकों को प्रस्तुत करने की आवश्यकता है, तो आपको उपयोग किए गए कोड की जांच करनी चाहिए block_page_build()। विशेष रूप से, यह वह कोड है जो संभवतः आपके लिए अधिक उपयोगी है:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

पहले दो पंक्तियों को सत्यापित किया जा रहा है कि पृष्ठ दिखाया जा रहा है वह थीम पृष्ठ नहीं है जिसका उपयोग यह दिखाने के लिए किया जाता है कि थीम क्षेत्र कहां रखे गए हैं।

यदि आपको ब्लॉक को अलग तरीके से प्रस्तुत करने की आवश्यकता है, तो यह अधिक संभावित है कि आप अपने विषय में theme_block () या (और भी शायद) को ओवरराइड करने में रुचि रखते हैं । जिस तरह से ब्लॉक प्रदान किए गए हैं, उसे बदलने का एक और तरीका ब्लॉक के लिए प्रीप्रोसेस फ़ंक्शन का उपयोग करना है ( हुक_परप्रोसेस_ब्लॉक () )।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.