Jak zastąpić motyw administratora w moim własnym motywie?

9

Stworzyłem własny motyw 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 }

Używam „Seven” jako motywu administratora.

Kiedy edytuję stronę (/ node / x / edit) używa się siedmiu motywów.

Teraz muszę dodać trochę CSS do formularza edycji. W jaki sposób mogę to zrobić? style.css jest ładowany tylko na stronach frontonu. Strony edycji używają siedmiu motywów, a mój motyw CSS jest ignorowany.

Jak mogę dodać trochę CSS do stron administracyjnych lub edytować formularze w Drupal 8?

drupalfan
źródło

Odpowiedzi:

17

Możesz dodać admin CSS z haka modułu. Zamień XXX na nazwę modułu.

1 Umieść swój CSS w css / extra.admin.css

2 Zadeklaruj bibliotekę, tworząc plik XXX.libraries.yml

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

3 Utwórz zaczep, aby załadować bibliotekę.

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

Nie można kontrolować jednego motywu z innego motywu. I nawet jeśli jakiś inteligentny programista mógłby znaleźć hackerski sposób na zrobienie tego: proszę nie. Zaufaj mi, nie chcesz tego. Koncepcja rozdzielenia problemów jest ważna w programowaniu. Zasadniczo oznacza to, że różne ruchome części (tj. Motyw) twojego systemu powinny zająć się własnym zadaniem, bez ingerowania w zadania innych części (tj. Motywu administratora).

Aby osiągnąć swój cel, najczystszym sposobem jest stworzenie nowego motywu, uczynienie go podtematem Siedem (dzięki czemu odziedziczy wszystko, co lubisz w Seven) i dodanie niestandardowego CSS do miksu. Teraz możesz wybrać ten motyw jako motyw administratora zamiast Siedem.

marcvangend
źródło
Niestety nie mogę uwierzyć, że nie ma sposobu na rozwiązanie tego. Muszę tylko dodać trochę CSS, takich jak img {max-width: 100%; wysokość: auto}. Musi być jakiś sposób.
drupalfan
4
Nie, nie wolno. Motywy nie są przeznaczone do mieszania. Może być tylko jeden aktywny motyw. Jeśli musisz to zrobić, utwórz moduł, który może zaimplementować modyfikację formularza i dodać kolejną bibliotekę.
Berdir
3
@drupalfan, nie rozumiem, dlaczego doszliście do wniosku, że nie ma sposobu na rozwiązanie tego. Tam sposoby (metoda Siedem subtheme opisałem, a metoda Berdir) i nie są one trudne do zrobienia. Proponowane przez Ciebie rozwiązanie przypomina poproszenie fryzjera o zmianę koloru butów. Nie rób tego
marcvangend
2
I do not want to mix themes, I only want to add one simple CSS!które uważa się za mieszanie w Drupal. Jedyną opcją, którą możesz zrobić, jest utworzenie podtematu Siedem lub „zhakowanie” motywu siedmiu, /core/themes/ale będzie on tracił zmiany za każdym razem, gdy aktualizujesz drupal 8. Musisz więc pamiętać o przesyłaniu przesłoniętego pliku .css za każdym razem uaktualniasz D8. Dlatego lepiej jest utworzyć podtemat Seven i używać go jako motywu administracyjnego, ponieważ podtemat będzie znajdować się w /themesfolderze, a nie w nim /core/themes.
Bez Sssweat
1
@Joum To, co opisujesz, jest zupełnie inne. OP poprosił o pozwolenie, aby jeden motyw wpłynął na inny. To mieszanie obowiązków, zwłaszcza że dwa tematy nigdy nie mogą być aktywne na tej samej stronie. Wysyłanie części CSS z modułem jest całkowicie normalne IMO - po prostu zachowaj lekkość, możliwość zastąpienia i ścisłe skoncentrowanie się na tym, co robi twój moduł.
marcvangend
5

Moduł, którego szukasz, nazywa się teraz Asset Injector . Dzięki niemu możesz dodawać CSS poprzez interfejs użytkownika, jak wspomniano w @Whatwatt.

chrisshattuck
źródło
4

Jeśli utworzysz podtemat dla Seven i użyjesz go jako motywu administratora, możesz dodać własne przesłonięcia css w pliku seven_subtheme.info.yml, bez bałagania się motywem podstawowym lub mylenia obowiązków związanych z motywem. Podtemat musi mieć tylko plik info.yml i css i odziedziczy wszystko inne.

Z jego brzmienia zależy ci głównie na zmianie css używanego przez edytor wysiwyg (ckeditor), więc zamiast tego możesz ckeditor_stylesheetsspróbować dodać do pliku info.yml. Należy zauważyć, że, jak wyjaśniono w tej kwestii , CKEditor css rzeczywiście może być dodany z Twojego tematu, jako edytor WYSIWYG powinien korzystać z rozrywki non-admin css domyślnie (pamiętaj, aby usunąć pamięci podręcznej po dodaniu tego).

autopoetyczne
źródło
Prawidłowa odpowiedź To jest sposób, aby to zrobić.
Kevin,
3

Zainstaluj moduł CSS Injector (obecnie istnieje tylko działająca wersja programistyczna dla Drupal 8).

Następnie przejdź do strony administracyjnej CSS Injector ( / admin / config / development / css-injector ). Utwórz nową regułę CSS. Na przykład, aby zmienić kolor tła pola:

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

Wybierz zastosowanie tej reguły do motywu Siedem (lub dowolnego używanego motywu administratora).

Oszczędzaj i ciesz się!

Whatwatt
źródło
>> Jak mogę dodać trochę CSS do stron administracyjnych lub edytować formularze w Drupal 8?
drupalfan
Zaktualizowałem swoją odpowiedź, przepraszam za mój błąd (odpowiedziałem na inny temat!)
Whatwatt
1

Aby pracować z dowolnym motywem administratora, użyłem odpowiedzi AdamS i zmieniłem zaczep na.

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

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

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

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

}
Sean
źródło
1

Dlaczego nie utworzyć bloku wywołującego css i wstawić go do nagłówka stron administracyjnych?

@import url ("/ themes / XYZ / css / admin_overrides.css")

Molesworth
źródło
1

Możesz dodać admin CSS z haka modułu. Zamień XXX na nazwę modułu.

1 Umieść swój CSS w css / extra.admin.css

2 Zadeklaruj bibliotekę, tworząc plik XXX.libraries.yml

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

3 Utwórz zaczep, aby załadować bibliotekę.

/ **
* Implementuje 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';
    }
 }
dev
źródło
0

stworzyłbym osobny motyw podrzędny dla front-office i back-office

Matoeil
źródło
Ale to trochę kłopot: skyriter.com/2018/04/07/…
cudowny
ten tuto ma 2 lata. Motyw chid admin działa płynnie. Dodaj do niego bibliotekę dla swojego css lub js i oto ona
Matoeil