Jawaban:
Anda dapat mencetak wilayah di dalam template apa pun, tetapi mereka tidak tersedia di luar kotak dalam node.tpl.php
template. Untuk membuatnya tersedia, Anda akan membuat variabel baru untuk digunakan dalam node.tpl.php
templat Anda yang akan berisi semua konten wilayah.
Membuat variabel template baru dilakukan dengan menggunakan fungsi preprocess. Di template.php
file tema Anda , buat fungsi yang terlihat seperti ini:
function mytheme_preprocess_node(&$variables) {
}
Mengganti mytheme
dengan nama pendek tema Anda. Sekarang, agar Drupal mengenali fungsi preprocess baru ini, Anda perlu membangun kembali registry tema situs Anda. Ini sesederhana pergi ke Konfigurasi → Pengembangan → Kinerja dan menekan tombol "Hapus semua cache" di bagian atas.
Sekarang, cara kerja fungsi preproses adalah yang $variables
berisi larik yang sesuai dengan variabel templat yang tersedia. Misalnya, dalam node.tpl.php
, $submitted
berisi 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 $page
yang berisi semua wilayah, Anda ingin mengisi $variables['page']
.
Masalahnya adalah bahwa $page
in node.tpl.php
sudah 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.php
templat tema Anda, Anda dapat membuat wilayah mana pun dengan melakukan hal berikut:
<?php print render($region['sidebar_first']); ?>
Di mana sidebar_first
nama wilayah yang ingin Anda render.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. Dari sini: webomelette.com/add-region-node-template
block_get_blocks_by_region()
hanya mengembalikan array blok dan jika Anda ingin menjadikannya sebagai wilayah, Anda perlu menambahkan pembungkus wilayah.