Perbedaan antara hook_page_alter dan preprocess_page?


10

Saya tidak sepenuhnya mengerti kapan saya harus menggunakan hook_page_alter (& $ page) atau template_preprocess_page (& $ vars, $ hook) di Drupal 7.

Apa praktik terbaik tentang itu untuk digunakan di template.php?

Terima kasih

Jawaban:


16

Perbedaannya adalah tujuan mereka.

hook_page_build () dan hook_page_alter () digunakan untuk menghapus, mengubah, atau menambahkan elemen di tingkat halaman.
Array $ page yang diteruskan hook_page_alter()berisi elemen tingkat atas untuk setiap wilayah blok. Secara default mereka adalah yang berikut:

  • page_top
  • tajuk
  • sidebar_first
  • kandungan
  • sidebar_second
  • page_bottom

Contoh implementasi dapat berupa yang berikut:

function mymodule_page_alter(&$page) {
  // Add help text to the user login block.
  $page['sidebar_first']['user_login']['help'] = array(
    '#weight' => -10, 
    '#markup' => t('To post comments or add new content, you first have to log in.'),
  );
}

Fungsi preprocess dipanggil untuk mengubah variabel yang diteruskan ke file templat. Mereka tidak dapat mengubah struktur halaman, tetapi mereka dapat mengubah konten dari beberapa elemen halaman yang mengubah konten variabel-variabel tersebut.
Misalnya, modul Overlay menghapus tab utama saat halaman yang divisualisasikan adalah overlay.

function overlay_preprocess_page(&$variables) {
  if (overlay_get_mode() == 'child') {
    unset($variables['tabs']['#primary']);
  }
}

1
Tetapi dengan hook preprocess_page saya dapat mengubah struktur halaman dengan mengubah hal-hal di dalam $ vars ['page']. Saya menggunakannya karena saya mengalami kesulitan untuk mendapatkan nid dengan hook_page_alter untuk halaman node.
gagarine

2
Anda bisa mendapatkan nid untuk halaman simpul menggunakan menu_get_object ()
andrewmacpherson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.