パスエイリアスに基づいてテンプレートを選択する最も簡単な方法は何ですか。たとえば、次のURLがあるとします。
http://www.example.com/mydirectory/page1
http://www.example.com/mydirectory/page2
http://www.example.com/mydirectory/page
mydirectoryのすべてのページのテンプレートを作成するにはどうすればよいですか?また、コンテンツタイプを使用してこれらのページのテーマを設定することはオプションではないことも付け加えておきます。
エイリアスをチェックする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
ではなくその新しいファイルが使用されます。
実際には drupal_match_path() を使用するよりも簡単です。これは、ブロックがページに表示されるかどうかにかかわらず、blocksモジュールが機能する方法です。
function MYTHEME_preprocess_page(&$vars) {
if (drupal_match_path(drupal_get_path_alias(), 'mydirectory/*')) {
$vars['theme_hook_suggestions'][] = 'page__mycustomtemplate';
}
}