it-swarm-id.com

Perbedaan antara hook_page_alter dan preprocess_page?

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

10
gagarine

Perbedaannya adalah tujuan mereka.

hook_page_build () dan hook_page_alter () digunakan untuk menghapus, mengubah, atau menambahkan elemen pada level halaman.
Array $ page diteruskan ke hook_page_alter() berisi elemen level 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.
Sebagai contoh, modul Overlay menghapus tab utama ketika halaman yang divisualisasikan adalah overlay.

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