Як замінити тему адміністратора в моїй власній темі?


9

Я створив власну тему Drupal 8:

mytheme.info.yml:

name: My Theme
description: 'Drupal 8 Theme'
type: theme
base theme: bartik
core: '8.x'

mytheme.libraries.yml

global-styling:
  version: 1.x
  css:
    theme:
      css/layout.css: {}
      css/style.css: {}
      css/colors.css: {}
      css/print.css: { media: print }

Я використовую "Сім" як тему адміністратора.

Коли я редагую сторінку (/ вузол / х / редагувати), використовується семи тема.

Тепер я повинен додати трохи CSS форми редагування. Як я можу це зробити? style.css завантажується лише на передніх сторінках. Редагувати сторінки використовують сім тем, а моя тема CSS ігнорується.

Як я можу додати деякі CSS до сторінок адміністратора чи редагувати форми в Drupal 8?

Відповіді:


17

Ви можете додати адмін CSS з гачка модуля. Замініть XXX на ім'я модуля.

1 Поставте CSS у css / extra.admin.css

2 Оголосіть бібліотеку, створивши XXX.libraries.yml

extra.admin:
  css:
    theme:
      css/extra.admin.css: {}

3 Створіть гачок для завантаження бібліотеки.

/**
 * Implements hook_page_attachments().
 */
function XXX_page_attachments(array &$attachments) {
  $theme = \Drupal::theme()->getActiveTheme()->getName();
  if ($theme == 'seven') {
    $attachments['#attached']['library'][] = 'XXX/extra.admin';
  }
}

15

Ви не можете керувати однією темою з іншої теми. І навіть якщо якийсь розумний розробник міг би знайти хакерський спосіб це зробити: будь ласка, не робіть цього. Повірте, ви цього не хочете. Концепція розділення проблем важлива в програмуванні. В основному це означає, що різні рухомі частини (тобто ваша тема) вашої системи повинні піклуватися про своє власне завдання, не втручаючись у завдання інших частин (тобто теми вашого адміністратора).

Щоб досягти своєї мети, найчистіший спосіб - створити нову тему, зробити її підтемою Seven (щоб вона успадковувала все, що вам подобається у Seven) і додайте свій спеціальний CSS у суміш. Тепер ви можете вибрати цю тему як свою адміністраторську тему замість семи.


Вибачте, я не можу повірити, що немає способу вирішити це. Мені потрібно додати лише такі CSS, як img {max-width: 100%; висота: авто}. Має бути спосіб.
drupalfan

4
Ні, не повинно бути. Теми не призначені для змішування. Може бути лише одна активна тема. Якщо вам потрібно це зробити, зробіть модуль, який може реалізувати зміну форми та додати іншу бібліотеку.
Бердір

3
@drupalfan, я не розумію, чому ти робиш висновок, що немає способу вирішити це. Там є способи (метод Сім підтеми я описав, і метод Berdir) , і вони не важко зробити. Таке рішення, яке ви запропонували, - це як попросити перукаря змінити колір взуття. Не робіть цього.
marcvangend

2
I do not want to mix themes, I only want to add one simple CSS!що вважається змішуванням в Drupal. Єдиний варіант, який ви маєте - або зробити підтему із семи, або "зламати" сім теми, які є, /core/themes/але ви будете втрачати зміни щоразу, коли ви оновите drupal 8. Тому вам доведеться пам’ятати, щоразу завантажувати перекритий .css файл ви оновите D8. Тому вам краще створити підтему «Сім» і використовувати це як тему адміністратора, оскільки підтема буде розташована у /themesпапці, а не всередині /core/themes.
Без розмивання

1
@Joum Те, що ви описуєте, зовсім інше. ОП просили дозволити одній темі впливати на іншу тему. Це обов'язки змішування, тим більше, що дві теми ніколи не можуть бути активними на одній сторінці. Доставка деяких CSS з модулем є цілком нормальним IMO - просто тримайте його у невеликій вазі, перезавантажуваному та чітко зосередженому на тому, що робить ваш модуль.
marcvangend

5

Модуль, який ви шукаєте, зараз називається Asset Injector . З його допомогою ви зможете додавати CSS через інтерфейс користувача, як згадував @Whatwatt.


4

Якщо ви створили підтему для Seven і використовуєте її як свою адміністраторську тему, ви можете додати свої власні зміни css у файл seven_subtheme.info.yml, не псуючи основну тему чи не плутаючи обов'язки теми. Підтемі потрібно мати лише info.yml файл і css, і він успадкує все інше.

З огляду на звуки цього, ви, головним чином, переймаєтесь зміною css, який використовує редактор wysiwyg (ckeditor), тому замість цього ви можете поглянути на додавання ckeditor_stylesheetsдо файлу info.yml. Зауважте, що, як пояснено в цьому випуску , ckeditor css дійсно можна додати з вашої теми, оскільки редактор wysiwyg повинен використовувати за замовчуванням тему css, що не є адміністратором (не забудьте очистити кеші після додавання цього).


Правильна відповідь. Це спосіб це зробити.
Кевін

3

Встановіть модуль CSS Injector (наразі існує лише робоча версія для Drupal 8).

Потім перейдіть на сторінку адміністрування CSS Injector ( / admin / config / development / css-injector ). Створіть нове правило CSS. Наприклад, щоб змінити колір фону поля:

.node-form .field--name-title input {
    background-color: red;
}

Виберіть, щоб застосувати це правило до семи теми (або будь-якої теми адміністратора, що використовується).

Збережіть і насолоджуйтесь!


>> Як я можу додати деякі CSS на сторінки адміністратора або редагувати форми в Drupal 8?
drupalfan

Я оновив свою відповідь, вибачте за свою помилку (я відповів на іншу тему!)
Whatwatt

1

Для роботи з будь-якою темою адміністратора я використав відповідь AdamS і змінив гачок на.

$config = \Drupal::config('system.theme');

$theme = \Drupal::theme()->getActiveTheme()->getName();

if ($theme == $config->get('admin')) {

  $attachments['#attached']['library'][] = 'XXXX/extra.admin';

}

1

Чому б не створити блок, що викликає css і не вставити його в заголовок сторінок адміністратора?

@import url ("/ теми / XYZ / css / admin_overrides.css")


1

Ви можете додати адмін CSS з гачка модуля. Замініть XXX на ім'я модуля.

1 Поставте CSS у css / extra.admin.css

2 Оголосіть бібліотеку, створивши XXX.libraries.yml

extra.admin:
  css:
  theme:
  css/extra.admin.css: {}

3 Створіть гачок для завантаження бібліотеки.

/ **
* Здійснює гачку_сторінки_настройки ().
* /

function XXX_page_attachments(array &$attachments) {
  $config = \Drupal::config('system.theme');
  $theme = \Drupal::theme()->getActiveTheme()->getName();
    if ($theme == $config->get('admin')) {
       $attachments['#attached']['library'][] = 'XXXX/extra.admin';
    }
 }

0

Я б створив окрему дочірню тему як для переднього, так і для заднього офісу


Але це трохи пустує: skyriter.com/2018/04/07/…
диво-очей

цьому туто 2 роки. Тема chid admin працює плавно. Додайте до нього бібліотеку для свого css або js, і ось це
Matoeil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.