web-dev-qa-db-ja.com

パスエイリアスに基づいてテンプレートを変更する

パスエイリアスに基づいてテンプレートを選択する最も簡単な方法は何ですか。たとえば、次のURLがあるとします。

http://www.example.com/mydirectory/page1
http://www.example.com/mydirectory/page2
http://www.example.com/mydirectory/page

mydirectoryのすべてのページのテンプレートを作成するにはどうすればよいですか?また、コンテンツタイプを使用してこれらのページのテーマを設定することはオプションではないことも付け加えておきます。

6
Jane

エイリアスをチェックするhook_preprocess_page()実装にロジックを追加し、パスが一致する場合はテーマフックの提案を追加できます。

function MYTHEME_preprocess_page(&$vars) {
  $alias_parts = explode('/', drupal_get_path_alias());

  if (count($alias_parts) && $alias_parts[0] == 'mydirectory') {
    $vars['theme_hook_suggestions'][] = 'page__mycustomtemplate';
  }
}

次に、テーマにpage--mycustomtemplate.tpl.phpファイルを作成し、キャッシュをクリアすると、mydirectory/で始まるエイリアスを持つすべてのページで、標準のpage.tpl.phpではなくその新しいファイルが使用されます。

21
Clive

実際には drupal_match_path() を使用するよりも簡単です。これは、ブロックがページに表示されるかどうかにかかわらず、blocksモジュールが機能する方法です。

function MYTHEME_preprocess_page(&$vars) {
  if (drupal_match_path(drupal_get_path_alias(), 'mydirectory/*')) {
    $vars['theme_hook_suggestions'][] = 'page__mycustomtemplate';
  }
}
4
Colin Shipton