Wie füge ich benutzerdefinierte Designeinstellungen hinzu?

7

In meinem Thema habe ich einen Link zum sozialen Netzwerk. Daher hätte ich gerne ein Feld in den Themeneinstellungen, in dem der Administrator einen Link einfügen kann, der an allen Stellen verwendet werden soll, an denen sich {{link-social-network}} befindet .

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

Ich habe auch gelesen, dass die Standardwerte für die Themeneinstellungen nicht in den info.yml-Dateien eines Themas festgelegt werden können.

Die Datei config / install / THEME.settings.yml des Themas sollte diese Informationen enthalten.

SakaSerbia
quelle

Antworten:

12

Sie können eine neue Datei erstellen und als aufrufen theme-settings.phpund Folgendes hinzufügen oder diese sogar zur Datei THEME_NAME.theme hinzufügen.

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'),
  );
}

Dann müssen Sie der THEME_NAME.themeDatei Folgendes hinzufügen .

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

Dann können Sie es in der twigDatei verwenden.

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

Um einen Standardwert für die soziale URL zu erhalten, können Sie ihn in Ihre URL aufnehmen config/install/THEME.settings.yml

Ich hoffe es hilft!

Suresh R.
quelle
Vielen Dank. Diese Arbeit ist perfekt. Wie Sie lernen, verwenden Sie Drupal \ Core \ Form \ FormStateInterface; Verwenden Sie Drupal \ Core \ Theme \ ThemeSettings. Verwenden Sie Drupal \ system \ Form \ ThemeSettingsForm. Verwenden Sie Drupal \ Core \ Form. Ich habe ein Problem damit ..
SakaSerbia
Auch bin ich mir da nicht ganz sicher.
Suresh R
Wenn Sie alle Themeneinstellungen in twig verfügbar haben möchten, können Sie alle mit $ Variablen verknüpfen. Siehe meine Antwort für Details.
Philipp Michael
Und Sie müssen nicht festgelegt $theme_namein , theme_get_setting('social_url');weil das aktuelle Thema der Standardwert
Philipp Michael
4

Zusätzlich zu Sureshs Antwort: Wenn Sie alle Themeneinstellungen in Ihrer Zweigvorlage verfügbar haben möchten, verwenden Sie die folgende Funktion:

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();
}

und nennen Sie es, wann immer Sie erweitern müssen $variables:

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

Dies ist mehr oder weniger eine Kopie, die aus dem Grundthema eingefügt wurde .

Philipp Michael
quelle
Das ist interessant. Sicher werde ich es versuchen. Vielen Dank für Ihre Erfahrungen.
SakaSerbia