如何在自己的主题中覆盖管理主题?


9

我创建了自己的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 }

我正在使用“七个”作为管理主题。

当我编辑页面(/ node / x / edit)时,使用七个主题。

现在,我必须在编辑表单中添加一些CSS。我怎样才能做到这一点?style.css仅加载在前端页面上。编辑页面使用七个主题,而我的主题CSS被忽略。

如何在Drupal 8中向管理页面添加一些CSS或编辑表单?

Answers:


17

您可以从模块挂钩添加管理CSS。用模块名称替换XXX。

1将CSS放入css / extra.admin.css

2通过创建XXX.libraries.yml声明一个库

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

3创建一个挂钩来加载库。

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

您不能从另一个主题中控制一个主题。即使某些聪明的开发人员可以找到一种骇人听闻的方法来做到这一点:请不要。相信我,你不要它。关注点分离的概念在编程中很重要。基本上,这意味着系统的不同活动部分(即您的主题)应照顾好自己的任务,而不会干扰其他部分的任务(即您的管理主题)。

为了实现您的目标,最干净的方法是创建一个新主题,使其成为Seven的子主题(因此它继承了您喜欢Seven的所有内容),并将您的自定义CSS添加到组合中。现在,您可以选择该主题作为您的管理主题,而不是选择七个。


对不起,我无法相信没有办法解决这个问题。我只需要添加一些CSS,例如img {max-width:100%; 高度:自动}。一定有办法。
drupalfan '16

4
不,一定不要。主题不能混用。只能有一个活动主题。如果需要执行此操作,请制作一个模块,该模块可以实现表单更改并添加另一个库。
贝尔迪尔

3
@drupalfan,我不明白您为什么得出结论无法解决此问题。有很多方法(我描述的七个主题方法和Berdir的方法)并不难做到。您建议的解决方案就像要求美发师更改鞋子的颜色。不要这样
marcvangend

2
I do not want to mix themes, I only want to add one simple CSS!在Drupal中被认为是混合的。您唯一的选择是将七个主题作为子主题,或者“破坏”其中的七个主题,/core/themes/但是每次升级drupal 8时,您都会丢失更改。因此,您将不得不记住每次都必须上传覆盖的.css文件您升级D8。因此,最好将子主题设置为7并将其用作管理主题,因为子主题将位于/themes文件夹中,而不位于内/core/themes
没有Sssweat

1
@Joum您所描述的完全不同。OP要求让一个主题影响另一个主题。这是混合的责任,尤其是因为两个主题永远无法在同一页面上活动。随模块一起运送一些CSS是完全正常的IMO-保持重量轻,可重写并严格关注模块的作用。
marcvangend


4

如果您为“ Seven”创建一个子主题,并将其用作管理主题,则可以在“ seven_subtheme.info.yml”文件中添加自己的css替代,而不会弄乱核心主题或使主题职责混淆。子主题仅需要具有info.yml文件和CSS,并将继承其他所有内容。

从声音上看,您主要关心的是更改所见即所得编辑器(ckeditor)使用的css,因此您可能想要查看将其添加ckeditor_stylesheets到info.yml文件中。请注意,正如本期中所述,确实可以从您的主题中添加ckeditor css ,因为所见即所得编辑器默认应使用非管理员主题css(请记住在添加此主题后清除缓存)。


正确答案。这是这样做的方法。
凯文(Kevin)

3

安装CSS Injector模块(当前只有适用于Drupal 8的开发版本)。

然后转到CSS Injector的管理页面(/ admin / config / development / css-injector)。创建一个新的CSS规则。例如,要更改字段背景颜色:

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

选择将此规则应用于七个主题(或正在使用的任何管理主题)。

保存并享受!


>>如何在Drupal 8中向管理页面添加一些CSS或编辑表单?
drupalfan

我更新了答案,对不起我的错误(我回答了另一个主题!)
Whatwatt

1

为了处理任何管理主题,我使用了AdamS答案并将其更改为。

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

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

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

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

}

1

为什么不创建一个调用CSS的块并将其插入到管理页面的标题中呢?

@import url(“ / themes / XYZ / css / admin_overrides.css”)


1

您可以从模块挂钩添加管理CSS。用模块名称替换XXX。

1将CSS放入css / extra.admin.css

2通过创建XXX.libraries.yml声明一个库

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

3创建一个挂钩来加载库。

/ **
*实现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';
    }
 }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.