高度なテーマ設定の作成
Drupalの管理セクションでは、各テーマにはadmin/appearance/settings/themeNameに独自の設定ページがあります。このページには、「ロゴ画像の設定」や「ファビコン設定」などの標準設定を含むフォームがあります。
Drupal 8では、テーマはTHEMENAME.themeファイルまたはtheme-settings.phpファイルのいずれかにPHP関数を追加することで、テーマ設定フォーム全体を変更できます。これらのファイルの1つで、テーマはフック関数THEMENAME_form_system_theme_settings_alter(&$form, $form_state)を使用する必要があります。フォームAPIの完全な柔軟性については、「Drupal 8のフォームAPI」、フォーム要素とレンダリング要素の完全なリスト、およびhook_form_FORM_ID_alter()ドキュメントを参照してください。
テーマ「foo」があり、デフォルト値「blue bikeshed」のテキストフィールドを追加したい場合の例を次に示します。次のコードをfoo/foo.themeファイルまたはfoo/theme-settings.phpファイルに追加します:
function foo_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id = NULL) {
// Work-around for a core bug affecting admin themes. See issue #943212.
if (isset($form_id)) {
return;
}
$form['foo_example'] = array(
'#type' => 'textfield',
'#title' => t('Widget'),
'#default_value' => theme_get_setting('foo_example'),
'#description' => t("Place this text in the widget spot on your site."),
);
}
追加するフォーム要素のデフォルト値を設定するには、config/install/THEME.settings.ymlファイルに次の形式の行を追加する必要があります:SETTING_NAME: DEFAULT_VALUE。テーマfooの場合、foo/config/install/foo.settings.ymlファイルを編集して次の行を追加する必要があります:
foo_example: blue bikeshed
テーマのPHPファイルでは、次の呼び出しでユーザーが設定した値を取得できます:
$foo_example = theme_get_setting('foo_example');
テーマ作成者は、高度なフォームAPI(自動補完、折りたたみ可能なフィールドセット)を使用して複雑な動的フォームを作成できることに注意してください。
テーマファイルでの設定値の取得
Twigファイルで設定を使用するには、THEMENAME.themeファイルの前処理関数を使用して、新しい変数をTwigファイルに追加する必要があります。
$variables['varname'] = theme_get_setting('varname')
たとえば、node.html.twigファイルにfoo_example設定を追加するには、foo.themeファイルに次のように追加します:
<?php
function foo_preprocess_node(&$variables) {
$variables['foo_example'] = theme_get_setting('foo_example');
}
次に、node.html.twigファイルで、foo_exampleを通常のTwig変数と同じようにアクセスできます:
{{foo_example}}
詳細情報
Drupal 8の変更記録を参照してください:https://www.drupal.org/node/2382645