Comment remplacer le thème admin dans mon propre thème?

9

J'ai créé mon propre thème 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 }

J'utilise "Seven" comme thème administrateur.

Lorsque je modifie une page (/ node / x / edit), le thème Seven est utilisé.

Maintenant, je dois ajouter du CSS au formulaire d'édition. Comment puis-je faire ceci? style.css n'est chargé que sur les pages frontales. Les pages d'édition utilisent sept thèmes et mon thème CSS est ignoré.

Comment puis-je ajouter du CSS aux pages d'administration ou modifier des formulaires dans Drupal 8?

drupalfan
la source

Réponses:

17

Vous pouvez ajouter des CSS admin à partir d'un hook de module. Remplacez XXX par le nom du module.

1 Mettez votre CSS dans css / extra.admin.css

2 Déclarez une bibliothèque en créant XXX.libraries.yml

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

3 Créez un crochet pour charger la bibliothèque.

/**
 * 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
la source
15

Vous ne pouvez pas contrôler un thème à partir d'un autre thème. Et même si un développeur intelligent pouvait trouver un moyen piraté de le faire: veuillez ne pas le faire. Croyez-moi, vous n'en voulez pas. Le concept de séparation des préoccupations est important dans la programmation. Fondamentalement, cela signifie que les différentes parties mobiles (c'est-à-dire votre thème) de votre système doivent prendre soin de leur propre tâche, sans interférer avec les tâches des autres parties (c'est-à-dire votre thème d'administration).

Pour atteindre votre objectif, la façon la plus simple est de créer un nouveau thème, d'en faire un sous-thème de Seven (afin qu'il hérite de tout ce que vous aimez à propos de Seven) et d'ajouter votre CSS personnalisé dans le mélange. Vous pouvez maintenant sélectionner ce thème comme thème administrateur au lieu de Seven.

marcvangend
la source
Désolé, je ne peux pas croire qu'il n'y ait aucun moyen de résoudre ce problème. Je n'ai qu'à ajouter du CSS comme img {max-width: 100%; hauteur: auto}. Il doit y avoir un moyen.
drupalfan
4
Non, il ne faut pas. Les thèmes ne sont pas censés se mélanger. Il ne peut y avoir qu'un seul thème actif. Si vous avez besoin de le faire, créez un module, qui peut implémenter un formulaire modifier et ajouter une autre bibliothèque.
Berdir
3
@drupalfan, je ne comprends pas pourquoi vous concluez qu'il n'y a aucun moyen de résoudre ce problème. Il existe des moyens (la méthode des sept sous-thèmes que j'ai décrits et la méthode de Berdir) et ils ne sont pas difficiles à faire. Le type de solution que vous proposez, c'est comme demander à un coiffeur de changer la couleur de vos chaussures. Ne le fais pas.
marcvangend
2
I do not want to mix themes, I only want to add one simple CSS!qui est considéré comme un mélange dans Drupal. La seule option que vous avez consiste à créer un sous-thème de Seven ou à "pirater" le thème des sept qui se trouve, /core/themes/mais vous perdrez les modifications à chaque mise à niveau de Drupal 8. Vous devrez donc vous rappeler de télécharger le fichier .css substitué à chaque fois vous mettez à niveau D8. Par conséquent, il vaut mieux créer un sous-thème de Seven et l'utiliser comme thème d'administration, car le sous-thème sera situé dans le /themesdossier et non à l'intérieur /core/themes.
Pas de Sssweat
1
@Joum Ce que vous décrivez est complètement différent. Le PO demandait de laisser un thème influencer un autre thème. C'est mélanger les responsabilités, d'autant plus que deux thèmes ne peuvent jamais être actifs sur la même page. L'expédition de CSS avec un module est parfaitement normale à l'OMI - il suffit de le garder léger, surchargeable et strictement concentré sur tout ce que fait votre module.
marcvangend
5

Le module que vous recherchez s'appelle désormais Asset Injector . Avec lui, vous pourrez ajouter du CSS via l'interface utilisateur comme @Whatwatt l'a mentionné.

chrisshattuck
la source
4

Si vous créez un sous-thème pour Seven et que vous l'utilisez comme thème d'administration, vous pouvez ajouter vos propres remplacements CSS dans le fichier seven_subtheme.info.yml, sans vous soucier du thème principal ou sans confondre les responsabilités du thème. Le sous-thème n'a besoin que du fichier info.yml et du css, et héritera de tout le reste.

D'après les sons de celui-ci, vous êtes principalement préoccupé par la modification du CSS utilisé par l'éditeur wysiwyg (ckeditor), vous pouvez donc plutôt envisager d'ajouter ckeditor_stylesheetsà votre fichier info.yml. Notez que, comme expliqué dans ce numéro , le ckeditor css peut en effet être ajouté à partir de votre thème, car l'éditeur wysiwyg devrait utiliser le thème non admin css par défaut (n'oubliez pas de vider les caches après l'ajout).

autopoïétique
la source
Bonne réponse. C'est la façon de procéder.
Kevin
3

Installez le module CSS Injector (il n'existe actuellement qu'une version de développement fonctionnelle pour Drupal 8).

Rendez-vous ensuite sur la page d'administration de CSS Injector ( / admin / config / development / css-injector ). Créez une nouvelle règle CSS. Par exemple, pour modifier la couleur d'arrière-plan d'un champ:

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

Choisissez d'appliquer cette règle au thème Seven (ou à n'importe quel thème administrateur utilisé).

Économisez et profitez!

Whatwatt
la source
>> Comment puis-je ajouter du CSS aux pages d'administration ou modifier des formulaires dans Drupal 8?
drupalfan
J'ai mis à jour ma réponse, désolé pour mon erreur (j'ai répondu à un autre sujet!)
Whatwatt
1

Pour travailler avec n'importe quel thème d'administration, j'ai utilisé la réponse d'AdamS et changé le crochet en.

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

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

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

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

}
Sean
la source
1

Pourquoi ne pas créer un bloc appelant le CSS et l'insérer dans l'en-tête de vos pages d'administration?

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

Molesworth
la source
1

Vous pouvez ajouter des CSS admin à partir d'un hook de module. Remplacez XXX par le nom du module.

1 Mettez votre CSS dans css / extra.admin.css

2 Déclarez une bibliothèque en créant XXX.libraries.yml

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

3 Créez un crochet pour charger la bibliothèque.

/ **
* Implémente 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
la source
0

je créerais un thème enfant séparé pour le front et le back office

Matoeil
la source
Mais c'est un peu compliqué: skyriter.com/2018/04/07/…
eye-wonder
ce tuto a 2 ans. Le thème d'administration chid fonctionne correctement. Ajoutez-y une bibliothèque pour vos css ou js et c'est
parti