Sự khác biệt giữa hook_page_alter và pre process_page?


10

Tôi hoàn toàn không hiểu khi nào tôi nên sử dụng hook_page_alter (& $ page) hoặc template_pre process_page (& $ vars, $ hook) trong Drupal 7.

Các thực tiễn tốt nhất về điều đó để sử dụng trong template.php là gì?

Cảm ơn

Câu trả lời:


16

Sự khác biệt là mục đích của họ.

hook_page_build ()hook_page_alter () được sử dụng để xóa, thay đổi hoặc thêm các thành phần ở cấp độ trang.
Mảng $ page được truyền để hook_page_alter()chứa các phần tử mức cao nhất cho từng vùng khối. Theo mặc định, chúng là những cái sau:

  • đầu trang
  • tiêu đề
  • sidebar_first
  • Nội dung
  • sidebar_second
  • trang_bottom

Một ví dụ về việc thực hiện có thể là một trong những điều sau đây:

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.'),
  );
}

Các hàm tiền xử lý được gọi để thay đổi các biến được truyền cho tệp mẫu. Họ không thể thay đổi cấu trúc của trang, nhưng họ có thể thay đổi nội dung của một số thành phần của trang thay đổi nội dung của các biến đó.
Ví dụ: mô-đun Lớp phủ sẽ loại bỏ các tab chính khi trang được hiển thị là lớp phủ.

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

1
Nhưng với hook pre process_page, tôi có thể thay đổi cấu trúc trang bằng cách thay đổi nội dung bên trong $ vars ['page']. Tôi sử dụng điều đó bởi vì tôi đã có một thời gian khó khăn để có được nid với hook_page_alter cho trang nút.
gagarine

2
Bạn có thể nhận nid cho một trang nút bằng menu_get_object ()
andrewmacpherson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.