Bisakah wilayah dicetak dalam templat simpul?

25

Bisakah wilayah dicetak dalam templat simpul, atau apakah kawasan dibatasi ketat pada templat halaman?

tim76
sumber

Jawaban:

48

Anda dapat mencetak wilayah di dalam template apa pun, tetapi mereka tidak tersedia di luar kotak dalam node.tpl.phptemplate. Untuk membuatnya tersedia, Anda akan membuat variabel baru untuk digunakan dalam node.tpl.phptemplat Anda yang akan berisi semua konten wilayah.

Membuat variabel template baru dilakukan dengan menggunakan fungsi preprocess. Di template.phpfile tema Anda , buat fungsi yang terlihat seperti ini:

function mytheme_preprocess_node(&$variables) {
}

Mengganti mythemedengan nama pendek tema Anda. Sekarang, agar Drupal mengenali fungsi preprocess baru ini, Anda perlu membangun kembali registry tema situs Anda. Ini sesederhana pergi ke KonfigurasiPengembanganKinerja dan menekan tombol "Hapus semua cache" di bagian atas.

Sekarang, cara kerja fungsi preproses adalah yang $variablesberisi larik yang sesuai dengan variabel templat yang tersedia. Misalnya, dalam node.tpl.php, $submittedberisi byline penulis. Dalam fungsi preproses di atas, ditemukan di $variables['submitted'].

Untuk meniru apa yang Anda miliki page.tpl.php, di mana Anda memiliki array yang disebut $pageyang berisi semua wilayah, Anda ingin mengisi $variables['page'].

Masalahnya adalah bahwa $pagein node.tpl.phpsudah diisi dengan nilai true / false yang memungkinkan Anda tahu apakah Anda melihat node itu sendiri atau dalam daftar.

Jadi untuk menghindari tabrakan nama itu, isilah $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();
    }
  }
}

Kemudian, di node.tpl.phptemplat tema Anda, Anda dapat membuat wilayah mana pun dengan melakukan hal berikut:

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

Di mana sidebar_firstnama wilayah yang ingin Anda render.


sumber
1
Akhirnya solusi yang berfungsi untuk Drupal 7 :)
Eduard Luca
4
Ada juga solusi cepat 'n' kotor yang bekerja untuk saya <?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>. Dari sini: webomelette.com/add-region-node-template
Darragh Enright
Solusi ini bagus. Bisakah Anda memberikan contoh kapan paling tepat untuk mencetak wilayah dalam node.tpl.php daripada memilikinya di page.tpl.php?
Randell
Itu tergantung pada desain Anda. Kadang-kadang tata letak mungkin meletakkan sidebar di tempat di mana lebih mudah untuk tema jika berada di dalam node div daripada di luarnya.
rooby
Jangan lupa tentang pembungkus wilayah yang tepat! Lihat system_page_alter () untuk referensi. Ingatlah bahwa block_get_blocks_by_region()hanya mengembalikan array blok dan jika Anda ingin menjadikannya sebagai wilayah, Anda perlu menambahkan pembungkus wilayah.
SiliconMind