অঞ্চলগুলি কোনও নোড টেমপ্লেটের মধ্যে মুদ্রিত করা যাবে?


25

অঞ্চলগুলি কোনও নোড টেমপ্লেটের মধ্যে মুদ্রিত করা যেতে পারে, বা অঞ্চলগুলি পৃষ্ঠার টেম্পলেটগুলির মধ্যে কঠোরভাবে সীমাবদ্ধ?

উত্তর:


48

আপনি যে কোনও টেম্প্লেটের অভ্যন্তরে অঞ্চলগুলি মুদ্রণ করতে পারেন, তবে সেগুলি node.tpl.phpটেমপ্লেটের বাক্সের বাইরে পাওয়া যায় না । এগুলিকে উপলভ্য করতে, আপনি আপনার node.tpl.phpটেমপ্লেটে ব্যবহারের জন্য একটি নতুন ভেরিয়েবল তৈরি করবেন যাতে এতে সমস্ত অঞ্চলের সামগ্রী থাকবে।

নতুন টেম্পলেট ভেরিয়েবলগুলি তৈরি করা একটি প্রিপ্রসেস ফাংশন ব্যবহার করে করা হয়। আপনার থিমের template.phpফাইলে এমন একটি ফাংশন তৈরি করুন যা দেখতে এইরকম দেখায়:

function mytheme_preprocess_node(&$variables) {
}

mythemeআপনার থিমের সংক্ষিপ্ত নামটি প্রতিস্থাপন করা হচ্ছে। এখন, দ্রুপাল এই নতুন প্রিপ্রোসেস ফাংশনটি স্বীকৃতি দেওয়ার জন্য আপনাকে আপনার সাইটের থিম রেজিস্ট্রি পুনরায় তৈরি করতে হবে। এটি কনফিগারেশনবিকাশপারফরম্যান্সে যেতে এবং উপরে "সমস্ত ক্যাশে সাফ করুন" বোতাম টিপানোর মতোই সোজা ।

এখন, প্রিপ্রোসেস ফাংশনগুলি যেভাবে কাজ করে তা হ'ল $variablesএমন একটি অ্যারে রয়েছে যা আপনার টেমপ্লেটের উপলব্ধ ভেরিয়েবলগুলির সাথে সম্পর্কিত s উদাহরণস্বরূপ, মধ্যে 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
অবশেষে দ্রুপাল 7 :) এর জন্য একটি কার্যক্ষম সমাধান
এডুয়ার্ড লুকা

4
আমার জন্য কাজ করে এমন একটি দ্রুত 'এন' নোংরা সমাধানও রয়েছে <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>। : এখান থেকে webomelette.com/add-region-node-template
Darragh Enright

এই সমাধান নিফটি হয়। আপনি উদাহরণ দিতে পারেন যে পৃষ্ঠা.tpl.php না রেখে নোড.tpl.php এর মধ্যে অঞ্চলগুলির মুদ্রণের ক্ষেত্রে এটি কখন প্রযোজ্য?
রেন্ডেল

এটি আপনার নকশার উপর নির্ভর করে। কখনও কখনও বিন্যাসটি এমন কোনও জায়গায় সাইডবারটি রাখে যেখানে থিমটি করা খুব সহজ যদি এটির বাইরে পরিবর্তে নোড ডিভের ভিতরে থাকে।
রোবি

উপযুক্ত অঞ্চল মোড়ক সম্পর্কে ভুলবেন না! রেফারেন্সের জন্য system_page_alter () দেখুন । মনে রাখবেন যে block_get_blocks_by_region()কেবলমাত্র ব্লকের অ্যারে দেয় এবং আপনি যদি অঞ্চল হিসাবে এটি রেন্ডার করতে চান তবে আপনাকে অঞ্চল মোড়ক যুক্ত করতে হবে।
সিলিকনমাইন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.