diykit/theme-settings.php
D.I.Y. kit テーマの diykit/theme-settings.php ファイル内で定義している、テーマ設定関数(phptemplate_settings)とスキンリストを取得するための関数(diykit_skinlist)について、いくつかのパートに区分してまとめています。
テーマ設定関数
テーマ設定関数内にフォームを定義することで、テーマの設定ページにテーマ固有の設定フォームを表示し、その設定値をテーマで使用することができるようになります。
D.I.Y. kit で使うことができるテーマ設定関数名は、phptemplate_settings または diykit_settings となります。
※ 以下のコードは、phptemplate_settings 関数の一部を抜き出したもので、完全なコードではありません。
デフォルト値の設定とマージ
テーマ固有の設定フォームを定義した場合、各フォームのデフォルト値を定義しておく必要があります。
D.I.Y. kit では、各フォームのデフォルト値は info ファイルに記述していますので、デフォルト値の設定とマージは、次のようなコードになっています。
$defaults = $themes['diykit']->info['settings'];
$settings = array_merge($defaults, $saved_settings);
このコードを一般的な記述方法で表すと、次のようになります。
'diykit_skin' => 'none',
'diykit_layout' => 'fixed',
'diykit_column' => 'portal',
'diykit_breadcrumb' => 0,
);
$settings = array_merge($defaults, $saved_settings);
※ この方法の場合、template.php にも同様の $defaults 配列を記述する必要があります。
フォームの定義
D.I.Y. kit で定義しているテーマ固有の設定フォームとそのコードは、次の通りです。
各フォームを「スキンデザイン」「レイアウトデザイン」「その他の設定」の 3つのグループに整理して表示するために、フィールドセットを利用しています。
- スキンデザイン(フィールドセット)
- 各スキンのスクリーンショット(ラジオボタン)
$form['diykit_skins']['diykit_skin'] = array(
'#type' => 'radios',
'#default_value' => $settings['diykit_skin'],
'#options' => diykit_skinlist('screenshot'),
); - レイアウトデザイン(フィールドセット)
- ページレイアウト(選択リスト)
- カラムレイアウト(選択リスト)
- その他の設定(フィールドセット)
- パンくずリストへページタイトルを設定(チェックボックス)
- フィールドセットは、いくつかのフォームをグループ化して表示するためのコントロールです。
- ラジオボタンは、複数の選択項目の中から該当するものを一つだけ選択するためのコントロールです。
- 選択リストは、複数の選択項目の中から該当するものを一つまたは複数選択するためのコントロールです。
スキンリスト取得関数
D.I.Y. kit では、各スキンのスクリーンショットを表示するラジオボタンの内容に、[code]'#options' => diykit_skinlist('screenshot')[/code] と、スキンリストを取得するための diykit_skinlist 関数を定義しています。
そのため、theme-settings.php ファイル内では diykit_skinlist 関数の定義も行っています。
$list['none'] = t('none');
$path = drupal_get_path('theme', 'diykit') .'/skin/';
if (file_exists($path)) {
$dir = dir($path);
while (FALSE !== ($skin = $dir->read())) {
if ($skin != '.' && $skin != '..') {
$screenshot = $path . $skin .'/screenshot.png';
$list[$skin] = t($skin);
if ($type == 'screenshot' && file_exists($screenshot)) {
$text = t('Screenshot for @skin', array('@skin' => t($skin)));
$list[$skin] .= '<br />';
$list[$skin] .= theme('image', $screenshot, $text, $text, array('class' => 'screenshot'), TRUE);
}
}
}
$dir->close();
}
return $list;
}
この関数は、diykit/skin ディレクトリ内に存在するディレクトリを自動的に取得して、そのリストを返すための関数です。
関数のパラメータに "screenshot" をセットした場合で、かつ、diykit/skin/skinName/screenshot.png ファイルが存在する場合には、スキン名だけでなく、スクリーンショットも表示されます。
DRUPAL*DRUPAL ドキュメントについて
- DRUPAL*DRUPAL ドキュメントは、公式サイトのドキュメントである Drupal handbooks およびその他の関連ページの内容を参考にして作成しています。(参考サイトは各ページに記載)
- DRUPAL*DRUPAL ドキュメントの各コンテンツは、クリエイティブ・コモンズ・ライセンス の下でライセンスされています。 また、コンテンツ内の各コードは、GNU GPL v2.0 の下でライセンスされています。
- Drupal handbooks の各ページの著作権は、それぞれの Book contributors に帰属します。


