Drupal 5 で静的 node を表紙にする場合の BK

Drupal では「管理 > サイト設定 > サイト情報」の「デフォルトの表紙」でトップページを設定することができます。たとえばここを node/1 などにすれば1番の node が表紙として表示されることになります。

デフォルトの表紙は node で,contemplate をインストールするとわかりますが,frontpage という(内蔵)ビューを使っています。それはさておき,デフォルトの表紙ページを使うと,

  • サイト名 | サイトスローガン

という title が使われます(サイトスローガンがある場合)。一方,通常の node 等を表示した際の title は,

  • node のタイトル | サイト名

のようになります。

ですので,「デフォルトの表紙」でデフォルト値以外を設定すると,

  • node のタイトル | サイト名

になってしまいます。これをなんとかデフォルトの挙動に揃えたい。

これはどこが制御しているのかというと,実は theme なんですね。デフォルトの garland というテーマは PHPTemplate を下位で使用しているので,実際にはそのエンジンが設定しています。

# themes/engines/phptemplate/phptemplate.engine: 183-

  if (drupal_get_title()) {
    $head_title = array(strip_tags(drupal_get_title()), variable_get('site_name'
, 'Drupal'));
  }
  else {
    $head_title = array(variable_get('site_name', 'Drupal'));
    if (variable_get('site_slogan', '')) {
      $head_title[] = variable_get('site_slogan', '');
    }
  }

  $variables = array(

    # ...... snip ......

    'head_title'          => implode(' | ', $head_title),

このようなコードになっていますので,ページにタイトルがついている場合は必ず上記のような title になります。


じゃあ theme を自分で書くしかないのか?

と思いますが,DrupalTMTOWTDI。上記のコードをニラんでいて考え付いた案。


それは,node(等)の題名を「0」にする,ことです。こうすると上記の判定部で「タイトルがない」と判断され,デフォルトと同じようなサイトスローガン付き title になります。おまけ?で node のタイトル(<h2>)も空になりますが,静的なページを表紙にしたいのなら,それはそれで便利かな,と思います。