Wie überschreibe ich einige Admin-Theme-CSS-Regeln? [geschlossen]

20

Gibt es eine Möglichkeit, nur einige CSS-Regeln zu überschreiben, die vom Admin-Theme verwendet werden, ohne das Admin-Theme selbst zu berühren (über einige Theme-Funktionen oder Modul-Hooks)? Zum Beispiel möchte ich text-align: rightin Admin-Formularen (und auch in Bearbeitungsknoten) ein zu jedem Ganzzahlfeld hinzufügen .

Claudio
quelle
5
Perfekt gültige Frage, die nicht geschlossen werden sollte. Es ist oft notwendig, das Admin-Theme (normalerweise Seven) zu optimieren, wenn das Erstellen eines neuen Sub-Themes zu viel des Guten wäre.
Kari Kääriäinen

Antworten:

15

Ich habe es einfach gemacht mit:

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

Das ist für mich etwas lesbarer.

Sebastian
quelle
1
Funktionierte auch für mich perfekt. Saubere Lösung.
Sasha Grievus
Gibt es eine Drupal 8-Version dieses praktischen Codes?
Petergus
11

Es gibt eine Reihe von Möglichkeiten, dies zu tun, aber nicht alle Ansätze sind gleich, was die Leistung Ihrer Website betrifft. Beispielsweise:

  1. Wenn Sie das Admin-Design kopieren oder ein auf dem Admin-Design basierendes Unterthema erstellen (beachten Sie, dass dies bei Drupal Commerce nicht funktioniert, da es bereits ein auf Shiny basierendes Unterthema enthält) und dann eine CSS-Datei über eine .info-Datei hinzufügen Aufruf , laden Sie das CSS auf jeder Seite.
  2. Wenn Sie das Admin-Design kopieren oder ein Unterthema erstellen, das auf dem Admin-Design basiert, können Sie den Hook drupal_add_css () in Ihrer template.php-Datei verwenden . Auf diese Weise können Sie das Stylesheet unter bestimmten Bedingungen aufrufen, beispielsweise nur auf bestimmten Seiten oder in bestimmten Browsern. Dies funktioniert in Ordnung, aber Sie rufen bereits mehr Dateien als nötig auf.
  3. Erstellen Sie Ihr eigenes Modul und rufen Sie drupal_add_css () auf. Soweit ich weiß, ist dies die 'leichteste' Möglichkeit, das Admin-Thema zu ändern, ohne das Original zu berühren, und sie funktioniert, wenn Ihr Admin-Thema bereits ein Unterthema ist (zum Beispiel ist das Kickstart-Admin-Thema von Drupal Commerce ein Unterthema von Shiny). Ich benutze diese Methode, weil es unter allen Umständen funktionieren wird. Ein Beispiel finden Sie unten:

Erstellen Sie ein Verzeichnis mit dem Namen 'mymodule' (verwenden Sie einen beliebigen Namen), erstellen Sie diese Dateien darin und platzieren Sie sie dann in Ihrem Verzeichnis sites / all / modules / custom. Ich habe dem folgenden Code Kommentare hinzugefügt, damit Sie sehen können, was passiert.

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

mymodule.info enthält:

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

mymodule.module enthält:

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 enthält dann Ihre Stile, die dem Admin-Design hinzugefügt werden. Leeren Sie Ihre Caches, aktivieren Sie dieses Modul und Sie können loslegen! Erfahren Sie hier mehr über drupal_add_css .

PWM
quelle
2
Keine Notwendigkeit für die $theme_pathVariable, wenn Sie den aktuellen CSS_THEMEarray('group' => CSS_THEME)
Modulpfad verwenden
Gibt es eine Drupal 8-Version dieses praktischen Codes?
Petergus
9

Ich erstelle ein Unterthema für jedes Admin-Thema, das ich gerade verwende .info, eine eindeutige CSS-Datei (normalerweise benannt overrides.css) und template.phpbei Bedarf eine Datei.

Brian Altenhofel
quelle
2

Was ist mit CSS Injector ?

Ich weiß nicht, ob es eine themenabhängige Konfigurationsregel zulässt, aber ich gehe davon aus, dass es eine zulässt, die auf dem Pfad basiert (also sollte admin / , node / add / , node / * / edit den Trick machen).

Berdir
quelle
Gute Idee. Versuchte es, aber es scheint nicht zu funktionieren (die CSS-Regel ist nicht wirklich gespeichert!). Ich habe auch Zweifel, dass es mit dem Overlay-System funktionieren würde (scheint, dass das Problem darin besteht, dass file_unmanaged_save_data () nichts speichert. Aber mein Setup ist irgendwie seltsam - eine Ubuntu-Box in einer OSX-vbox).
Claudio
Hm. Vielleicht ein Bug oder ähnliches in der aktuellen Version. Ich denke, es sollte theoretisch in der Überlagerung funktionieren. Es ist auch in der Lage, die Überlagerung mit einem anderen Thema anzuzeigen. Sie können dies auch in einem einfachen benutzerdefinierten Modul tun, das ich denke, Ihre CSS in einer Datei speichern, hook_init () implementieren und drupal_add_css () verwenden, wenn einige Bedingungen zutreffen.
Berdir