Mencetak wilayah di html.tpl.php

10

Saya perlu menampilkan beberapa daerah di templat html.tpl.php karena ini tidak berubah antara page.tpl.php dan page-front.tpl.php (hanya untuk menyebutkan dua). Pada dasarnya saya ingin menghindari duplikasi kode.

Namun sepertinya tidak ada yang terkait dengan daerah di html.tpl.php, saya juga tidak bisa mengambil apa pun menggunakan drupal_get_region_content (baik dengan dan tanpa parameter itu hanya mengembalikan array kosong).

Ide ide?

Morpheu5
sumber
Apakah Anda menggunakan drupal_set_region_content()untuk mengatur konten wilayah?
kiamlaluno
2
Tidak ada fungsi seperti itu. Mungkin maksud Anda drupal_add_region_content()tetapi saya tidak melihat gunanya: Saya mengatur konten wilayah melalui antarmuka admin blok.
Morpheu5
1
Ya, maksud saya drupal_add_region_content().
kiamlaluno

Jawaban:

18

Saya memecahkan seperti ini:

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

dan kemudian saya bisa melakukannya

<?php print render($region_name) ?>
Morpheu5
sumber
Mengapa menggunakan echo? Tentu saja berhasil.
SDMulroy
Tentu, jika saya menerapkan modul atau tema publik saya akan dipaksa untuk mengikuti standar komunitas. Ini adalah tema khusus yang digunakan secara eksklusif oleh klien saya.
Morpheu5
Saya tahu bahwa ini adalah posting yang sangat lama, tetapi saya pikir itu dalam penilaian yang buruk untuk menerima jawaban di mana penulis jawaban dengan malas menjawab pertanyaan itu. mis. Anda menyediakan fungsi untuk ditambahkan, tetapi anggap semua pembaca akan secara ajaib tahu di mana kode ini harus hidup. Itu bagian yang malas dan saya memilih ini karena tidak memberikan apa pun kepada pengguna drupal pemula.
Skittles
Saya menghargai masukan Anda, dan fakta bahwa novis mungkin tidak mendapatkan penjelasan lengkap. Namun, harap pertimbangkan bahwa a) pemberian sendok makan untuk pemula yang malas, dan b) kepada siapa pun yang bahkan dengan cepat membaca dokumen (seperti yang harus dimiliki oleh pemula yang tidak malas) penempatan fungsi itu harus relatif jelas. Jika tidak, maka ada manual untuk alasan yang bagus. Pertanyaan saya (dan jawaban) membahas masalah pada tingkat di mana pengetahuan dasar tertentu tentang tema Drupal dapat diasumsikan. Selain itu, ini adalah situs T&J, situs Documents bersebelahan.
Morpheu5
1
@ Skitties Kami tidak dapat menduplikasi dokumentasi ini hanya karena pengguna baru tidak bisa tahu apa fungsi preprocess seperti yang ditunjukkan dalam pertanyaan. Itu bahkan bukan bagian dari pertanyaan. Jika pengguna memiliki fungsi preproses abput pertanyaan khusus, mereka akan mengajukan pertanyaan baru.
kiamlaluno
2

drupal_get_region_content()mengembalikan konten yang telah ditetapkan dengan panggilan sebelumnya drupal_add_region_content(), tetapi tidak menyertakan konten blok, yang dirender di halaman melalui block_page_build () .

Jika Anda mencari "drupal_add_region_content" dalam kode sumber Drupal, Anda akan melihat bahwa fungsinya dipanggil oleh:

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

Apa yang Anda tetapkan untuk blok di halaman administratif adalah di wilayah mana blok akan diberikan, tetapi kontennya tidak ditambahkan dengan drupal_add_region_content(); pada kenyataannya, tidak ada fungsi yang tercantum di atas (yang merupakan satu-satunya fungsi yang memanggil drupal_add_region_content(), kecuali kode untuk menguji instalasi Drupal) adalah untuk merender / menambahkan konten blok.

Jika Anda perlu merender blok dalam kode Anda sendiri, Anda harus memeriksa kode yang digunakan block_page_build(). Secara khusus, ini adalah kode yang mungkin lebih berguna bagi Anda:

  // 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;
      }
    }
    // …
  }

Dua baris pertama memverifikasi halaman yang ditampilkan bukan halaman demo yang digunakan untuk menunjukkan di mana kawasan tema ditempatkan.

Jika Anda perlu merender blok dengan cara yang berbeda, kemungkinan besar Anda tertarik untuk mengganti theme_block () pada tema Anda, atau (bahkan lebih mungkin) membuat file template block.tpl.php kustom. Cara lain untuk mengubah cara blok diberikan adalah dengan menggunakan fungsi preprocess untuk blok ( hook_preprocess_block () ).

kiamlaluno
sumber