如何覆盖一些管理主题CSS规则?[关闭]


20

有没有一种方法可以仅覆盖admin主题使用的某些CSS规则,而不触及admin主题本身(通过某些主题功能或模块挂钩)?例如,我想text-align: right在管理表单中(以及在编辑节点中)向每个整数字段添加a 。


5
完全有效的问题,不应关闭。通常需要调整管理主题(通常为七个),以免创建新的子主题。
KariKääriäinen15年

Answers:


15

我做到了,只是使用:

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

对我来说,这更具可读性。


1
对我来说也很完美。清洁溶液。
Sasha Grievus

此便捷代码是否有drupal 8版本?
petergus '17

11

有许多方法可以做到这一点,但是就影响网站性能而言,并非所有方法都是平等的。例如:

  1. 如果您复制管理主题或基于管理主题创建子主题(请注意,这不适用于Drupal Commerce,因为它已经具有基于Shiny的子主题)-然后通过.info添加css文件调用,您将在每个页面上加载CSS。
  2. 如果您复制管理主题,或基于管理主题创建子主题,则可以在template.php文件中使用钩子drupal_add_css()。这将允许您有条件地调用样式表,例如仅在某些页面上或对于某些浏览器。这项工作正常,但是您已经调用了多余的文件。
  3. 创建您自己的模块,然后从中调用drupal_add_css()。据我所知,这是在不更改原始主题的情况下更改管理主题的“最轻巧”的方法,并且如果您的管理主题已经是一个子主题(例如,Drupal Commerce Kickstart Admin主题是Shiny的子主题),该方法也将有效。我使用此方法,因为它可以在所有情况下使用。参见以下示例:

创建一个名为“ mymodule”的目录(使用您想要的任何名称),在其中创建这些文件,然后将其放在您的sites / all / modules / custom目录中。我在下面的代码中添加了注释,以便您可以看到发生了什么。

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

mymodule.info包含:

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

mymodule.module包含:

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将具有您的样式,这些样式将添加到管理主题中。清除缓存,启用此模块,即可开始比赛!在此处了解有关drupal_add_css的更多信息


2
$theme_path如果您使用当前的模块路径,CSS_THEME则不需要变量...而且不是权重而是一个组:array('group' => CSS_THEME)
MrUpsidown

此便捷代码是否有drupal 8版本?
petergus '17

9

我要做的是为我使用的任何管理主题创建一个子主题,仅使用.info,一个唯一的CSS文件(通常名为overrides.css)和一个template.php文件(如果需要)。


2

CSS Injector呢?

我不知道它是否允许主题相关的配置规则,但我假设它确实允许基于路径的规则(因此admin / ,node / add /,node / * / edit应该可以解决问题)。


好主意。尝试过,但似乎不起作用(实际上并未保存CSS规则!)。我还怀疑它是否可以与覆盖系统一起使用(似乎问题出在file_unmanaged_save_data()中,什么也没保存。但是我的设置有点奇怪-OSX vbox内的ubuntu框)。
克劳迪奥

嗯 可能是当前版本中的错误或类似问题。我认为它应该在叠加层内部理论上起作用。它还可以显示具有不同主题的叠加层。我还可以在一个简单的自定义模块中执行此操作,将CSS保存到文件中,实现hook_init()并在某些情况下使用drupal_add_css()。
贝尔迪尔
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.