Как мне переопределить тему администратора в моей собственной теме?


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 }

Я использую "Семь" в качестве темы администратора.

Когда я редактирую страницу (/ node / x / edit), используется тема Seven.

Теперь я должен добавить 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

Вы не можете контролировать одну тему из другой темы. И даже если какой-нибудь умный разработчик найдет хакерский способ сделать это: пожалуйста, не надо. Поверь мне, ты не хочешь этого. Концепция разделения интересов важна в программировании. По сути, это означает, что различные движущиеся части (например, ваша тема) вашей системы должны выполнять свои собственные задачи, не мешая задачам других частей (например, вашей теме администратора).

Чтобы достичь своей цели, самый простой способ - создать новую тему, сделать ее подтемой «Семь» (чтобы она наследовала все, что вам нравится в «Семи») и добавить свой собственный 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. Поэтому вам лучше создать подтему Seven и использовать ее в качестве темы администратора, поскольку подтема будет расположена в /themesпапке, а не внутри /core/themes.
Нет Sssweat

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. Обратите внимание, что, как объяснено в этом выпуске , cksitor css действительно может быть добавлен из вашей темы, так как редактор wysiwyg должен использовать css темы не-admin по умолчанию (не забудьте очистить кеш после добавления этого).


Правильный ответ. Это способ сделать это.
Кевин

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?
друпалфан

Я обновил свой ответ, извините за ошибку (я ответил на другую тему!)
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 ("/ themes / 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 Создайте хук для загрузки библиотеки.

/ **
* Реализует hook_page_attachments ().
* /

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, и вот оно
Матейл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.