カスタムテーマ設定を追加するにはどうすればよいですか?


7

私のテーマでは、ソーシャルネットワークへのリンクがあります。したがって、管理者が{{link-social-network}}であるすべての場所で使用されるリンクを配置できるテーマ設定のフィールドが欲しいです。

<a href="{{link-social-network}}" class="btn-social btn-outline"><i class="fa fa-fw fa-facebook"></i></a>

また、テーマ設定のデフォルト値をテーマのinfo.ymlファイルで設定できないことも読みました。

テーマのconfig / install / THEME.settings.ymlファイルにその情報が含まれている必要があります。

回答:


12

新しいファイルを作成theme-settings.phpしてそれを次のように呼び出し、以下を追加するか、THEME_NAME.themeファイルに追加することもできます。

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Theme\ThemeSettings;
use Drupal\system\Form\ThemeSettingsForm;
use Drupal\Core\Form;

function THEME_NAME_form_system_theme_settings_alter(&$form, Drupal\Core\Form\FormStateInterface $form_state) {
  $form['THEME_NAME_settings']['social_icon']['social_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Social Link'),
    '#default_value' => theme_get_setting('social_url', 'THEME_NAME'),
  );
}

次に、以下をTHEME_NAME.themeファイルに追加する必要があります。

function THEME_NAME_preprocess_page(&$variables) {
  $variables['social_url'] = theme_get_setting('social_url','THEME_NAME');
}

その後、twigファイルで使用できます。

<a href="{{ social_url }}" class="btn-social btn-outline"><i class="fa fa-fw fa-facebook"></i></a>

ソーシャルURLのデフォルト値を取得するには、それを config/install/THEME.settings.yml

それが役に立てば幸い!


大いに感謝する。この作品は完璧です。Drupal \ Core \ Form \ FormStateInterfaceを使用する方法 Drupal \ Core \ Theme \ ThemeSettingsを使用します。Drupal \ system \ Form \ ThemeSettingsFormを使用します。Drupal \ Core \ Formを使用します。私はそれ..に問題がある
SakaSerbia

それについてもほとんど確信が持てません。
Suresh R

すべてのテーマ設定をtwigで使用できるようにする場合は、すべてを$ variablesに結合できます。詳細については、私の回答を参照してください。
Philipp Michael

そして、あなたは設定する必要はありません$theme_nametheme_get_setting('social_url');、現在のテーマがデフォルト値であるため、
フィリップ・マイケル・

4

Sureshの回答の補足:すべてのテーマ設定をtwigテンプレートで使用できるようにするには、次の関数を使用します。

use Drupal\Core\Cache\CacheableMetadata;
function _THEME_extend_variables(&$variables){
  // Add cachability metadata.
  $theme_name = \Drupal::theme()->getActiveTheme()->getName();
  $theme_settings = \Drupal::config($theme_name . '.settings');
  CacheableMetadata::createFromRenderArray($variables)
    ->addCacheableDependency($theme_settings)
    ->applyTo($variables);
  // Union all theme setting variables to the twig template variables.
  $variables += $theme_settings->getOriginal();
}

拡張する必要があるときはいつでも呼び出します$variables

function THEME_preprocess_page(&$variables) {
  // extend twig variables with theme settings
  _THEME_extend_variables($variables);
  // do fancy stuff
}

これは多かれ少なかれ基本的なテーマから貼り付けられたコピーです。


これは面白い。確かにやってみます。あなたの経験を共有していただきありがとうございます。
SakaSerbia 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.