it-swarm-ja.com

hook_page_alterとpreprocess_pageの違いは?

Drupal 7。

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

ありがとう

10
gagarine

違いは彼らの目的です。

hook_page_build() および hook_page_alter() は、ページレベルで要素を削除、変更、または追加するために使用されます。
hook_page_alter()に渡される$ page配列には、各ブロック領域の最上位要素が含まれています。デフォルトでは、次のとおりです。

  • 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']);
  }
}
16
kiamlaluno