Jawaban:
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 Konfigurasi → Pengembangan → Kinerja 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.
<?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.