logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
05/05/2020, by maria

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