pict-drupal.png DrupalのURLに応じたテンプレート命名規則はURLエイリアスではそのままではうまく動作しない。ここではURLエイリアスに応じたテンプレートを使うための方法を紹介します。

参考記事「Different page templates depending on URL aliases」
http://drupal.org/node/139766

Drupal 6においては以下のようなようなコードをtemplate.phpに記述すればOKということです。

  1. <?php
  2. function phptemplate_preprocess_page(&$vars) {
  3.   if (module_exists('path')) {
  4.     $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
  5.     if ($alias != $_GET['q']) {
  6.       $template_filename = 'page';
  7.       foreach (explode('/', $alias) as $path_part) {
  8.         $template_filename = $template_filename . '-' . $path_part;
  9.         $vars['template_files'][] = $template_filename;
  10.       }
  11.     }
  12.   }
  13. }
  14. ?>

これにより、たとえば http://www.example.com/node/1のURLエイリアスがhttp://www.example.com/movieの場合に、page-movie.tpl.phpというページテンプレートファイルを使うことができるようになります。

また、この例の場合には適用されるテンプレートは優先順の高いものから順に、以下のようになります。
  1. page-movie.tpl.php (今回の紹介するコードでこれが有効になる)
  2. page-node-1.tpl.php
  3. page-node.tpl.php
  4. page.tpl.php

 

まだ投票はありません