Come posso sostituire il tema dell'amministratore nel mio tema?


9

Ho creato il mio tema 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 }

Sto usando "Seven" come tema di amministrazione.

Quando modifico una pagina (/ node / x / edit) viene utilizzato il tema Seven.

Ora devo aggiungere alcuni CSS nel modulo di modifica. Come posso fare questo? style.css viene caricato solo sulle pagine front-end. Le pagine di modifica utilizzano sette temi e il mio tema CSS viene ignorato.

Come posso aggiungere alcuni CSS alle pagine di amministrazione o modificare i moduli in Drupal 8?

Risposte:


17

È possibile aggiungere CSS amministratore da un hook del modulo. Sostituisci XXX con il nome del modulo.

1 Inserisci il tuo CSS in css / extra.admin.css

2 Dichiarare una libreria creando XXX.libraries.yml

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

3 Creare un hook per caricare la libreria.

/**
 * 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

Non puoi controllare un tema all'interno di un altro tema. E anche se qualche sviluppatore intelligente potesse trovare un modo hacker per farlo: per favore, non farlo. Fidati di me, non lo vuoi. Il concetto di separazione delle preoccupazioni è importante nella programmazione. Fondamentalmente significa che le diverse parti mobili (ad es. Il tuo tema) del tuo sistema dovrebbero occuparsi del proprio compito, senza interferire con le attività di altre parti (ad es. Il tema dell'amministratore).

Per raggiungere il tuo obiettivo, il modo più pulito è creare un nuovo tema, renderlo un sottotema di Seven (quindi eredita tutto ciò che ti piace di Seven) e aggiungere il tuo CSS personalizzato nel mix. Ora puoi selezionare quel tema come tema di amministrazione anziché Sette.


Spiacente, non posso credere che non ci sia modo di risolverlo. Devo solo aggiungere alcuni CSS come img {max-width: 100%; altezza: auto}. Ci deve essere un modo.
drupalfan,

4
No, non ci deve essere. I temi non sono pensati per mescolarsi. Può esserci solo un tema attivo. Se devi farlo, crea un modulo, che può implementare un cambio di modulo e aggiungere un'altra libreria.
Berdir,

3
@drupalfan, non capisco perché concludi che non c'è modo di risolverlo. Ci sono modi (il metodo con sette sottotitoli che ho descritto e il metodo di Berdir) e non sono difficili da fare. Il tipo di soluzione che hai suggerito è come chiedere a un parrucchiere di cambiare il colore delle tue scarpe. Non farlo
marcvangend,

2
I do not want to mix themes, I only want to add one simple CSS!quello è considerato mescolarsi in Drupal. L'unica opzione che hai è di fare un sottotipo di Seven o "hackerare" il tema sette che è in /core/themes/ma perderai le modifiche ogni volta che aggiorni drupal 8. Quindi dovrai ricordare di caricare il file .css override ogni volta aggiorni D8. Pertanto, è meglio creare un sottotema di Seven e utilizzarlo come tema di amministrazione, poiché il sottotema si troverà nella /themescartella e non all'interno /core/themes.
No Sssweat,

1
@Joum Quello che descrivi, è completamente diverso. L'OP chiedeva di lasciare che un tema influenzasse un altro tema. Questo è mescolare le responsabilità, soprattutto perché due temi non possono mai essere attivi sulla stessa pagina. Spedire alcuni CSS con un modulo è IMO perfettamente normale: basta mantenerlo leggero, scavalcabile e focalizzato rigorosamente su qualunque cosa faccia il tuo modulo.
marcvangend,

5

Il modulo che stai cercando ora si chiama Asset Injector . Con esso sarai in grado di aggiungere CSS attraverso l'interfaccia utente come menzionato @Whatwatt.


4

Se crei un sottotema per Seven e lo usi come tema di amministrazione, puoi aggiungere le tue sostituzioni css nel file seven_subtheme.info.yml, senza fare confusione con il tema principale o confondendo le responsabilità del tema. Il sottotema deve solo avere il file info.yml e il css e erediterà tutto il resto.

Dal suono di ciò, però, ti preoccupi principalmente di alterare i CSS usati dall'editor wysiwyg (ckeditor), quindi potresti voler guardare l'aggiunta ckeditor_stylesheetsal tuo file info.yml. Si noti che, come spiegato in questa edizione , il ckeditor css può infatti essere aggiunto dal tuo tema, come l'editor wysiwyg dovrebbe utilizzare il non-admin tema css per default (ricordarsi di cache chiare dopo l'aggiunta di questo).


Risposta corretta. Questo è il modo di farlo.
Kevin,

3

Installa il modulo CSS Injector (al momento esiste solo una versione di sviluppo funzionante per Drupal 8).

Quindi vai alla pagina di amministrazione di CSS Injector ( / admin / config / development / css-injector ). Crea una nuova regola CSS. Ad esempio, per cambiare un colore di sfondo del campo:

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

Scegli di applicare questa regola sul tema Seven (o su qualsiasi tema admin in uso).

Risparmia e divertiti!


>> Come posso aggiungere alcuni CSS alle pagine di amministrazione o modificare i moduli in Drupal 8?
drupalfan,

Ho aggiornato la mia risposta, scusate il mio errore (ho risposto a un altro argomento!)
Whatwatt,

1

Per lavorare con qualsiasi tema di amministrazione ho usato la risposta di AdamS e ho cambiato il gancio in.

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

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

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

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

}

1

Perché non creare un blocco che chiama il CSS e inserirlo nell'intestazione delle pagine di amministrazione?

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


1

Puoi aggiungere admin CSS da un hook del modulo. Sostituisci XXX con il nome del modulo.

1 Inserisci il tuo CSS in css / extra.admin.css

2 Dichiarare una libreria creando XXX.libraries.yml

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

3 Creare un hook per caricare la libreria.

/ **
* Implementa 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

vorrei creare un tema figlio separato sia per il front office che per il back office


Ma è un po 'un problema: skyriter.com/2018/04/07/…
eye-wonder

questo tuto ha 2 anni. Il tema chid admin funziona in modo fluido. Aggiungi una libreria ad esso per i tuoi css o js ed eccola qui
Matoeil,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.