Jak zastąpić niektóre reguły CSS motywu administratora? [Zamknięte]

20

Czy istnieje sposób na zastąpienie tylko niektórych reguł CSS używanych przez motyw administratora, bez dotykania samego motywu administratora (za pomocą niektórych funkcji motywu lub zaczepów modułów)? Na przykład chciałbym dodać text-align: rightdo każdego pola liczb całkowitych w formularzach administratora (a także w węzłach edycji).

Claudio
źródło
5
Idealnie ważne pytanie, które nie powinno być zamknięte. Często istnieje potrzeba ulepszenia motywu administratora (zazwyczaj Siedem), w przypadku którego utworzenie nowego motywu podrzędnego byłoby przesadą.
Kari Kääriäinen

Odpowiedzi:

15

Zrobiłem to, używając:

function mymodule_preprocess_html(&$variables) {

  global $theme;

  if ($theme === variable_get('admin_theme', 'seven')) {

    // Reference your custom stylesheet.
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/mymodule.css', array('weight' => CSS_THEME));
  }
}

To dla mnie trochę bardziej czytelne.

Sebastian
źródło
1
Dla mnie też działał idealnie. Czyste rozwiązanie.
Sasha Grievus,
Czy istnieje przydatna wersja drupal 8 tego przydatnego kodu?
petergus
11

Można to zrobić na wiele sposobów, ale nie wszystkie podejścia są równe pod względem wpływu na wydajność witryny. Na przykład:

  1. Jeśli skopiujesz motyw administratora lub utworzysz podtemat oparty na motywie administratora (uwaga, to nie będzie działać z Drupal Commerce, ponieważ ma już podtemat oparty na Shiny) - a następnie dodasz plik css poprzez .info zadzwoń , załadujesz CSS na każdej stronie.
  2. Jeśli skopiujesz motyw administratora lub utworzysz podtemat oparty na motywie administratora, możesz użyć hook drupal_add_css () w pliku template.php . Umożliwi to warunkowe wywołanie arkusza stylów, na przykład tylko na niektórych stronach lub w niektórych przeglądarkach. To działa dobrze, ale już wywołujesz więcej plików, niż to konieczne.
  3. Utwórz własny moduł i wywołaj z niego drupal_add_css () . O ile mi wiadomo, jest to „najlżejszy” sposób zmiany motywu administratora bez dotykania oryginału i zadziała, jeśli motyw administratora jest już podtematem (np. Motyw administratora Drupal Commerce Kickstart to podtemat Shiny). Używam tej metody, ponieważ zadziała we wszystkich okolicznościach. Przykład poniżej:

Utwórz katalog o nazwie „mymodule” (użyj dowolnej nazwy), utwórz w nim te pliki, a następnie umieść go w katalogu witryn / wszystkich / modułów / niestandardowych. Dodałem komentarze do poniższego kodu, abyś mógł zobaczyć, co się dzieje.

  • mymodule.info
  • mymodule.module
  • css / mymodule.css

mymodule.info zawiera:

name = mymodule
description = Custom alterations for admin pages on my website
core = 7.x

mymodule.module zawiera:

function mymodule_preprocess_html(&$variables) {
  // Add conditional stylesheets for admin pages on admin theme.
  if (arg(0) === "admin") {
    // Reference your current admin theme.
    $theme_path = drupal_get_path('theme', 'commerce_kickstart_admin');
    // Reference your own stylesheet.
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/mymodule.css', array('weight' => CSS_THEME));
  }
}

css / mymodule.css będzie wtedy mieć twoje style, które zostaną dodane do motywu administratora. Wyczyść swoje skrzynki, włącz ten moduł i ruszaj na wyścigi! Dowiedz się więcej o drupal_add_css tutaj .

PWM
źródło
2
$theme_pathZmienna nie jest potrzebna, jeśli używasz bieżącej ścieżki modułu ... i CSS_THEMEnie jest to waga, ale grupa:array('group' => CSS_THEME)
MrUpsidown
Czy istnieje przydatna wersja drupal 8 tego przydatnego kodu?
petergus
9

To, co robię, to utworzenie podtematu dla dowolnego motywu administratora, którego używam .info, z unikalnym plikiem CSS (zwykle o nazwie overrides.css) i template.phpplikiem, jeśli to konieczne.

Brian Altenhofel
źródło
2

Co z wtryskiwaczem CSS ?

Nie wiem, czy pozwala na regułę konfiguracji zależną od motywu, ale zakładam, że zezwala na regułę opartą na ścieżce (więc admin / , node / add / , node / * / edit powinien załatwić sprawę).

Berdir
źródło
Dobry pomysł. Próbowałem, ale wydaje się, że nie działa (reguła CSS nie jest tak naprawdę zapisana!). Mam również wątpliwości, czy to zadziała z systemem nakładek (wydaje się, że problem polega na tym, że file_unmanaged_save_data () nic nie zapisuje. Ale moja konfiguracja jest trochę dziwna - pole ubuntu wewnątrz vbox OSX).
Claudio
Hm Może błąd lub coś takiego w obecnej wersji. Myślę, że powinien teoretycznie działać wewnątrz nakładki. Jest także w stanie pokazać nakładkę z innym motywem. Można to również zrobić w prostym niestandardowym module, jak sądzę, zapisać css w pliku, zaimplementować hook_init () i użyć drupal_add_css (), jeśli spełnione są pewne warunki.
Berdir