Làm cách nào để thêm cài đặt chủ đề tùy chỉnh?


7

Trong chủ đề của tôi, tôi có liên kết đến mạng xã hội. Vì vậy, tôi muốn có trường trong cài đặt chủ đề nơi quản trị viên có thể đặt liên kết những gì sẽ được sử dụng ở tất cả các nơi có {{link-social-network}} .

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

Tôi cũng đọc rằng các giá trị mặc định của cài đặt chủ đề không thể được đặt trong các tệp info.yml của chủ đề.

Tập tin config / install / THEME.sinstall.yml của chủ đề nên có thông tin đó.

Câu trả lời:


12

Bạn có thể tạo tệp mới và gọi nó là theme-settings.phpvà thêm phần sau vào tệp hoặc thậm chí thêm tệp này vào tệp 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'),
  );
}

Sau đó, bạn cần thêm các mục sau vào THEME_NAME.themetập tin.

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

Sau đó, bạn có thể sử dụng nó trong twigtập tin.

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

Để có giá trị mặc định cho url xã hội, bạn có thể đưa nó vào config/install/THEME.settings.yml

Hy vọng nó giúp!


Cảm ơn bạn rất nhiều. Công việc này hoàn hảo. Cách bạn sử dụng để sử dụng Drupal \ Core \ Form \ FormStateInterface; sử dụng Drupal \ Core \ Theme \ ThemeS Settings; sử dụng Drupal \ system \ Form \ ThemeSinstallForm; sử dụng Drupal \ Core \ Form; Tôi có vấn đề với điều đó ..
SakaSerbia

Ngay cả tôi không chắc chắn nhiều về nó.
Suresh R

Nếu bạn muốn có tất cả các cài đặt chủ đề có sẵn trong twig, bạn có thể kết hợp tất cả với các biến $. Xem câu trả lời của tôi để biết chi tiết.
Philipp Michael

Và bạn không cần phải thiết lập $theme_nametheme_get_setting('social_url');vì chủ đề hiện tại là giá trị mặc định
Philipp Michael

4

Bổ sung cho câu trả lời của Suresh: Nếu bạn muốn có tất cả các cài đặt chủ đề có sẵn trong mẫu twig của mình, hãy sử dụng chức năng sau:

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

và gọi nó khi nào bạn cần gia hạn $variables:

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

Đây là bản sao ít nhiều được dán từ chủ đề cơ bản .


Hay đấy. Chắc chắn tôi sẽ cố gắng. Cảm ơn vì đã chia sẻ kinh nghiệm của bạn.
SakaSerbia ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.