theme-settings.php ファイル
Drupal 6.x では、theme-settings.php ファイルを使用することで、それぞれのテーマに固有の設定フォームを追加することができるようになっています。
Drupal 5.x の場合も、Theme Settings API モジュールを追加することで、同様の機能を追加できます。
固有設定フォームの定義
テーマ固有の設定ページに表示するフォームを設定するためには、theme-settings.php ファイル内でテーマ設定関数を定義し、その関数内で $form 変数に配列として Form API を使用したフォームの定義を行う必要があります。
- テーマ設定関数の命名規則
-
- [engineName|themeName]_settings
- テーマ設定関数のサンプル
-
- phptemplate_settings -- PHPTemplate テーマエンジンのエンジン名を使用した場合
- garland_settings -- Garland テーマのテーマ名を使用した場合
- 読み込まれるテーマ設定関数の順序
-
- engineName_settings
- themeName_settings
※ 先に読み込まれた関数が、後から読み込まれた関数で上書き(オーバーライド)されます。
- サンプルコード
-
function phptemplate_settings($saved_settings) {
// デフォルト値の設定
$defaults = array(
'garland_happy' => 1,
'garland_shoes' => 0,
);
// デフォルト値を保存されている値でマージ
$settings = array_merge($defaults, $saved_settings);
// フォームの定義(Form API)
$form['garland_happy'] = array(
'#type' => 'checkbox',
'#title' => t('Get happy'),
'#default_value' => $settings['garland_happy'],
);
$form['garland_shoes'] = array(
'#type' => 'checkbox',
'#title' => t('Use ruby red slippers'),
'#default_value' => $settings['garland_shoes'],
);
// リターン値
return $form;
}
デフォルト値の初期化
theme-settings.php に定義された各フォームの値は、テーマ固有の設定ページで設定値が保存されるまでは、未設定の状態となっていますので、テーマが正常に表示されないなどの問題を引き起こす可能性があります。
この問題を回避するために、template.php ファイルのトップ部分にデフォルト値を初期化するためのコードを追記する必要があります。
- サンプルコード
-
if (is_null(theme_get_setting('garland_happy'))) {
// $theme_key の取得
global $theme_key;
// デフォルト値の設定(theme-settings.php の設定内容と同一)
$defaults = array(
'garland_happy' => 1,
'garland_shoes' => 0,
);
// 現在の値を取得
$settings = theme_get_settings($theme_key);
// toggle_node_info_ で始まる値を保存しないための設定
if (module_exists('node')) {
foreach (node_get_types() as $type => $name) {
unset($settings['toggle_node_info_' . $type]);
}
}
// デフォルト値を保存されている値でマージして保存
variable_set(
str_replace('/', '_', 'theme_'. $theme_key .'_settings'),
array_merge($defaults, $settings)
);
// 設定値のリフレッシュ
theme_get_setting('', TRUE);
}
設定値の参照
保存された各フォームの値は、theme_get_setting('formkey') 関数を使用することで、template.php ファイルや各テンプレートファイル(.tpl.php)から参照できます。
- サンプルコード
-
theme-settings.php ファイルで行う「固有設定フォームの定義」と、template.php ファイルで行う「デフォルト値の初期化」の両方で、デフォルト値として同一の内容を記述する必要があります。
この方法が非効率的だと感じる場合は、info ファイルにテーマ固有の設定のデフォルト値を定義するという方法も利用できます。
DRUPAL*DRUPAL ドキュメントについて
- DRUPAL*DRUPAL ドキュメントは、公式サイトのドキュメントである Drupal handbooks およびその他の関連ページの内容を参考にして作成しています。(参考サイトは各ページに記載)
- DRUPAL*DRUPAL ドキュメントの各コンテンツは、クリエイティブ・コモンズ・ライセンス の下でライセンスされています。 また、コンテンツ内の各コードは、GNU GPL v2.0 の下でライセンスされています。
- Drupal handbooks の各ページの著作権は、それぞれの Book contributors に帰属します。


