Como substituo o tema do administrador no meu próprio tema?

9

Criei meu próprio 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 }

Estou usando o "Seven" como tema de administrador.

Quando edito uma página (/ node / x / edit), o tema Seven é usado.

Agora eu tenho que adicionar um pouco de CSS ao formulário de edição. Como posso fazer isso? style.css é carregado apenas nas páginas finais. As páginas de edição usam sete temas e meu CSS de tema é ignorado.

Como posso adicionar CSS nas páginas de administração ou editar formulários no Drupal 8?

drupalfan
fonte

Respostas:

17

Você pode adicionar CSS de administrador a partir de um gancho de módulo. Substitua XXX pelo nome do módulo.

1 Coloque seu CSS em css / extra.admin.css

2 Declare uma biblioteca criando XXX.libraries.yml

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

3 Crie um gancho para carregar a biblioteca.

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

Você não pode controlar um tema de dentro de outro tema. E mesmo que algum desenvolvedor inteligente possa encontrar uma maneira tola de fazê-lo: por favor, não. Confie em mim, você não quer isso. O conceito de separação de preocupações é importante na programação. Basicamente, isso significa que as diferentes partes móveis (por exemplo, o seu tema) do seu sistema devem cuidar de suas próprias tarefas, sem interferir nas tarefas de outras partes (por exemplo, o tema do administrador).

Para atingir seu objetivo, a maneira mais limpa é criar um novo tema, transformá-lo em um subtema do Seven (para herdar tudo o que você gosta no Seven) e adicionar seu CSS personalizado ao mix. Agora você pode selecionar esse tema como tema administrativo em vez de Sete.

Marcvangend
fonte
Desculpe, não acredito que não há como resolver isso. Eu só tenho que adicionar algum CSS como img {max-width: 100%; height: auto}. Deve haver um caminho.
Drupalfan
4
Não, não deve. Temas não são feitos para misturar. Só pode haver um tema ativo. Se você precisar fazer isso, crie um módulo que possa implementar um formulário para alterar e adicionar outra biblioteca.
Berdir 30/05
3
@drupalfan, não entendo por que você conclui que não há como resolver isso. Não são maneiras (o método de sete subtema eu descrevi, e o método de Berdir) e eles não são difíceis de fazer. O tipo de solução que você sugeriu é como pedir a um cabeleireiro que mude a cor dos seus sapatos. Não faça isso.
Marcvangend # 30/16
2
I do not want to mix themes, I only want to add one simple CSS!isso é considerado mistura no Drupal. A única opção que você tem é criar um subtema de Seven ou "hackear" o tema dos sete, /core/themes/mas você perderá alterações toda vez que atualizar o drupal 8. Portanto, lembre-se de carregar o arquivo .css sempre substituído você atualiza o D8. Portanto, é melhor criar um subtema do Seven e usá-lo como administrador do tema, porque o subtema estará localizado na /themespasta e não dentro /core/themes.
No Sssweat
11
@ Jim O que você descreve, é completamente diferente. O OP estava perguntando sobre deixar um tema influenciar outro tema. Isso está misturando responsabilidades, especialmente porque dois temas nunca podem estar ativos na mesma página. O envio de algum CSS com um módulo é IMO perfeitamente normal - apenas mantenha-o leve, substituível e estritamente focado no que quer que seu módulo faça.
Marcvangend 12/10
5

O módulo que você está procurando agora se chama Asset Injector . Com ele, você poderá adicionar CSS através da interface do usuário, como o @Whatwatt mencionado.

chrisshattuck
fonte
4

Se você criar um subtema para o Seven e usá-lo como tema administrativo, poderá adicionar suas próprias substituições de css no arquivo seven_subtheme.info.yml, sem mexer no tema principal ou confundir responsabilidades do tema. O subtema precisa apenas ter o arquivo info.yml e o css e herdará todo o resto.

Pelo que parece, você se preocupa principalmente com a alteração do css usado pelo editor wysiwyg (ckeditor), portanto, você pode querer adicionar ckeditor_stylesheetso arquivo info.yml. Observe que, conforme explicado nesta edição , o ckeditor css pode realmente ser adicionado a partir do seu tema, pois o editor wysiwyg deve usar o tema não administrador css por padrão (lembre-se de limpar os caches depois de adicioná-lo).

autopoiético
fonte
Resposta adequada. É assim que se faz.
Kevin
3

Instale o módulo Injetor CSS (atualmente existe apenas uma versão de desenvolvimento para o Drupal 8).

Em seguida, vá para a página de administração do CSS Injector ( / admin / config / development / css-injector ). Crie uma nova regra CSS. Por exemplo, para alterar uma cor de fundo do campo:

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

Escolha aplicar esta regra ao tema Sete (ou qualquer tema administrativo em uso).

Salve e divirta-se!

Whatwatt
fonte
>> Como posso adicionar CSS nas páginas de administração ou editar formulários no Drupal 8?
drupalfan
Eu atualizei a minha resposta, desculpe pelo meu erro (I respondeu outro assunto!)
Whatwatt
1

Para trabalhar com qualquer tema de administrador, usei o AdamS answer e alterei o gancho para.

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

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

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

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

}
Sean
fonte
1

Por que não criar um bloco chamando o css e inseri-lo no cabeçalho das suas páginas de administração?

URL de importação @ ("/ themes / XYZ / css / admin_overrides.css")

Molesworth
fonte
1

Você pode adicionar CSS de administrador a partir de um gancho de módulo. Substitua XXX pelo nome do módulo.

1 Coloque seu CSS em css / extra.admin.css

2 Declare uma biblioteca criando XXX.libraries.yml

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

3 Crie um gancho para carregar a biblioteca.

/ **
* 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';
    }
 }
dev
fonte
0

eu criaria um tema filho separado para front office e back office

Matoeil
fonte
Mas é um pouco confuso: skyriter.com/2018/04/07/…
eye-wonder
este tuto tem 2 anos de idade. O tema chid admin funciona sem problemas. Adicione uma biblioteca para o seu css ou js e aqui vai
Matoeil 27/03