Please Sign In or Register

Drupal Books

PHP を CGI モードで動作させた場合に 404 Not Found ではなく 200 OK を返してしまう

PHP を CGI モードで動作させている Drupal サイトでは、存在しないページやアクセスが許可されていないページを表示した場合に、正しい HTTP レスポンスヘッダを返さない。
通常は、存在しないページの場合 404 Not Found を返し、アクセスが許可されていないページの場合 403 Forbidden を返すはずなのだが、どちらとも 200 OK を返してしまうので、削除したページがいつまでもサーチエンジンにインデックスされたままになってしまうなどの問題が発生してしまう可能性がある。

テーマ変数(box.tpl.php)

テンプレート内で動的な内容を表示するためには、変数を用いて <?php print $variable; ?> のように、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。

box.tpl.php で使用可能な変数と返される内容は以下の通りです。

変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。

テーマ変数(block.tpl.php)

テンプレート内で動的な内容を表示するためには、変数を用いて <?php print $variable; ?> のように、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。

block.tpl.php で使用可能な変数と返される内容は以下の通りです。

変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。

テーマ変数(comment.tpl.php)

テンプレート内で動的な内容を表示するためには、変数を用いて <?php print $variable; ?> のように、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。

comment.tpl.php で使用可能な変数と返される内容は以下の通りです。

変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。

テーマ変数(node.tpl.php)

テンプレート内で動的な内容を表示するためには、変数を用いて <?php print $variable; ?> のように、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。

node.tpl.php で使用可能な変数と返される内容は以下の通りです。

変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。

テーマ変数(page.tpl.php)

各テンプレートファイルでは、動的な内容を表示するために $variable のような変数を使用することができます。
変数にセットされた内容を出力するためには、該当する箇所に <?php print $variable; ?> と、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。

以下が page.tpl.php で使用可能な変数と返される内容になります。

変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。

テンプレートファイルの命名規則

テンプレートファイルは、そのファイル名から読み取られる条件が詳細なものから順に探され、ない場合にはデフォルトのテンプレートが使用される仕組みになっています。
この機能を利用することで、コンテンツタイプやカテゴリなどに応じた複数のテンプレートを使い分けることができます。

PHPTemplate テンプレートファイル

PHPTemplate エンジンを利用した Drupal テーマの構成は以下の通りです。
日本語での使用を前提とした foo テーマを新規作成する場合に必要だと思われるものを記載しています。

  • foo/style.css --- *必須* デフォルトで読み込まれるスタイルシートです。
  • foo/page.tpl.php --- *必須* theme('page') で呼び出されるページ全体のテンプレートです。
  • foo/node.tpl.php --- theme('node') で呼び出されるコンテンツ部分のテンプレートです。
  • foo/comment.tpl.php --- theme('comment') で呼び出されるコメント部分のテンプレートです。
  • foo/block.tpl.php --- theme('block') で呼び出されるブロックのテンプレートです。
  • foo/box.tpl.php --- theme('box') で呼び出されるメインエリアを構成するコンテナのテンプレートです。
  • foo/template.php --- phptemplate.engine で定義された内容のオーバーライトや、新しい定義を追加する場合に必要です。
  • foo/screenshot.png --- テーマのリストにスクリーンショットを表示する場合に必要です。ない場合は "スクリーンショットなし" と表示されます。
  • foo/foo.info --- Drupal 6.x から必要になるファイルで、現在リリースされているテーマファイルにも同梱されている場合があります。

テーマの概観

Drupal では、テーマエンジンによって出力する内容を定義し、テーマエンジンで定義された内容を出力する場所をテンプレートで指定するという方法がとられています。

5.x のデフォルトのテーマエンジンには PHPTemplate が利用されていますが、他にも PHPTAL theme engine, Smarty theme engine, wgSmarty theme engine, XTemplate, Zengine などのテーマエンジンがあり、それぞれにテンプレートへの記述方法が異なります。
このうち、Drupal 5.x に対応したエンジンとしてリリースされているものは PHPTemplate および PHPTAL theme engine, Zengine の 3種類のみで、Smarty theme engine についてはパッチが公開されていますが、公式リリースはされていないようです。

テーマ開発ガイド

テーマを作成するための概要として Drupal handbook の Theme developer's guidePHPTemplate Theme Snippets に記載してある内容を自分なりにまとめていく予定です。

カスタマイズの段階としては、簡単な方から順に以下のような選択肢がありますが、詳細なカスタマイズを行うためには Drupal API を含めた PHP などの知識が必要になります。

分類用語の追加

新しい分類用語を作成することができます。

分類用語の追加

ボキャブラリの作成で設定できる内容は以下の通りです。 * は必須項目です。
また、ボキャブラリの設定内容によって追加される設定項目については、(ボキャブラリでの設定項目名) のように記載しています。

ボキャブラリの追加

新しいボキャブラリを作成することができます。

ボキャブラリの追加

ボキャブラリの作成で設定できる内容は以下の通りです。 * は必須項目です。

カテゴリ

コンテンツを分類するためのカテゴリについて、ボキャブラリ(複数の分類用語からなるグループ)とそのボキャブラリに属する分類用語の管理や、分類方法についての設定を行うことができます。

カテゴリ

カテゴリページには、作成したボキャブラリの一覧が表示されます。
Forum モジュールが有効化されている場合は、「Forum」 という名前のボキャブラリが自動的に作成されます。このボキャブラリは Forum 用に特別に作成されたボキャブラリですので、設定できる内容に多少の制限があります。

Views

Views は、データベースのテーブルの内容から、表示する項目、抽出の条件、並べ替えの順序などを指定したクエリを作成するためのモジュールです。
クエリの結果は、特定の URL を持つページまたはブロックとしてサイト上に表示できます。
「クエリ」 + 「ページやブロックでの表示方法」 = 「ひとつの View」 というイメージになると思います。
そして、そのひとつひとつの View に関する設定を行うためのモジュールが Views UI モジュールになりますので、最低でも、Views と Views UI の2つのモジュールを有効にすることが必要です。

Views 使用例 - 最近のコメント

このサイトでの Views の使用例として、「最近のコメント」 ブロックについてまとめています。

デフォルトの 「最近のコメント」 ブロック

デフォルトの 「最近のコメント」 ブロックの内容は、ブロックのみに表示され、特定の URL を持ったページとしては表示されません。
また、表示される内容は、以下の形式で、最新の10件のコメントが表示されるようになっています。

  • コメントのタイトル
    投稿日時(~前)

これを View での設定内容に置き換えてみると、以下のような設定が行われていることになります。

コンテンツの配信