hook_page_alter和preprocess_page之间的区别?


10

我不完全了解何时应该在Drupal 7中使用hook_page_alter(&$ page)或template_preprocess_page(&$ vars,$ hook)。

在template.php中使用的最佳做法是什么?

谢谢

Answers:


16

区别在于他们的目的。

hook_page_build()hook_page_alter()用于在页面级别删除,更改或添加元素。
传递给的$ page数组hook_page_alter()包含每个块区域的顶级元素。默认情况下,它们是:

  • page_top
  • 标头
  • sidebar_first
  • 内容
  • sidebar_second
  • page_bottom

以下是一个实现示例:

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

调用预处理功能以更改传递到模板文件的变量。它们不能更改页面的结构,但是可以更改页面某些元素的内容,从而更改这些变量的内容。
例如,当要可视化的页面为叠加层时,叠加模块将删除主要标签。

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

1
但是,通过钩子preprocess_page,我可以通过更改$ vars ['page']中的内容来更改页面结构。我之所以使用它,是因为我很难用节点页面的hook_page_alter来获得该图片。
gagarine

2
您可以使用menu_get_object()
andrewmacpherson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.