hook_page_alterとpreprocess_pageの違いは?


10

Drupal 7でhook_page_alter(&$ page)またはtemplate_preprocess_page(&$ vars、$ hook)をいつ使用すればよいか完全に理解していません。

template.phpで使用するためのベストプラクティスは何ですか?

ありがとう

回答:


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

前処理関数は、テンプレートファイルに渡される変数を変更するために呼び出されます。ページの構造を変更することはできませんが、ページの一部の要素のコンテンツを変更して、それらの変数のコンテンツを変更することができます。
たとえば、視覚化されているページがオーバーレイの場合、Overlayモジュールは主タブを削除します。

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

1
しかし、フックpreprocess_pageを使用すると、$ vars ['page']内の要素を変更することでページ構造を変更できます。ノードページのhook_page_alterでnidを取得するのに苦労したため、これを使用します。
ガガリン2011年

2
menu_get_object()を使用してノードページのnidを取得できます
andrewmacpherson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.