自分のテーマで管理テーマをオーバーライドするにはどうすればよいですか?


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)7つのテーマが使用されます。

次に、CSSを編集フォームに追加する必要があります。これどうやってするの?style.cssはフロントエンドページにのみ読み込まれます。編集ページは7つのテーマを使用し、私のテーマのCSSは無視されます。

Drupal 8で管理ページまたは編集フォームにCSSを追加するにはどうすればよいですか?

回答:


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

あるテーマを別のテーマ内から制御することはできません。そして、たとえ賢い開発者がそれをするハッキーな方法を見つけたとしても、そうしないでください。私を信じて、あなたはそれを望まない。関心の分離の概念は、プログラミングにおいて重要です。基本的には、システムのさまざまな可動部分(つまり、テーマ)が他の部分(つまり、管理テーマ)のタスクを妨げることなく、独自のタスクを処理する必要があることを意味します。

目標を達成するための最もクリーンな方法は、新しいテーマを作成し、それをセブンのサブテーマにして(セブンの好きなものをすべて継承する)、カスタムCSSをミックスに追加することです。これで、Sevenではなく、そのテーマを管理テーマとして選択できます。


申し訳ありませんが、これを解決する方法がないとは信じられません。img {max-width:100%;のようなCSSを追加するだけです。height:auto}。道があるに違いない。
drupalfan 2016年

4
いいえ、ありません。テーマは混合することを意図していません。アクティブなテーマは1つだけです。必要な場合は、フォームを変更して別のライブラリを追加できるモジュールを作成します。
Berdir 2016年

3
@drupalfan、これを解決する方法がないとあなたが結論付けた理由がわかりません。ありますかの方法(セブンサブテーマの私が説明する方法、およびBerdirの方法)は、彼らが行うことは困難ではありません。あなたが提案した種類の解決策は、美容師に靴の色を変えるように頼むようなものです。しないでください。
marcvangend 2016年

2
I do not want to mix themes, I only want to add one simple CSS!これはDrupalでの混合と見なされます。唯一の選択肢は、7のサブテーマにするか、7つのテーマを「ハック」することですが、/core/themes/drupal 8をアップグレードするたびに変更が失われます。したがって、オーバーライドされた.cssファイルを毎回アップロードすることを忘れないでください。 D8をアップグレードします。したがって、サブテーマは/themes内ではなくフォルダーに配置されるため、セブンのサブテーマを作成し、それをアドミンテーマとして使用することをお勧めします/core/themes
2016年

1
@Joumあなたが説明することは、まったく異なります。OPは、あるテーマを別のテーマに影響を与えることを求めていました。特に、2つのテーマを同じページでアクティブにすることはできないため、責任が混在しています。一部のCSSをモジュールと一緒に出荷することは、完全に通常のIMOです。軽量でオーバーライド可能であり、モジュールが行うことすべてに厳密に焦点を合わせてください。
marcvangend


4

Sevenのサブテーマを作成し、それを管理テーマとして使用する場合、コアテーマを変更したり、テーマの責任を混乱させたりせずに、seven_subtheme.info.ymlファイルに独自のcssオーバーライドを追加できます。サブテーマはinfo.ymlファイルとCSSのみが必要で、他のすべてを継承します。

ただし、そのサウンドからは、主にwysiwygエディター(ckeditor)で使用されるcssの変更に関心があるため、代わりにckeditor_stylesheetsinfo.ymlファイルへの追加を確認することをお勧めします。この問題で説明したように、wysiwygエディターはデフォルトで非管理テーマcssを使用する必要があるため、ckeditor cssを実際にテーマから追加できることに注意してください(これを追加した後、キャッシュをクリアすることを忘れないでください)。


適切な答え。これがその方法です。
Kevin

3

CSSインジェクターモジュールをインストールします(現在、Drupal 8の機能する開発バージョンしかありません)。

次に、CSS Injectorの管理ページ(/ admin / config / development / css-injector)に移動します。新しいCSSルールを作成します。たとえば、フィールドの背景色を変更するには:

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

このルールをセブンテーマ(または使用中の管理テーマ)に適用することを選択します。

保存してお楽しみください!


>> Drupal 8でCSSを管理ページに追加したり、フォームを編集したりするにはどうすればよいですか?
drupalfan 2016年

私は自分の答えを更新しましたが、間違いを犯して申し訳ありません(別のトピックに答えました!)
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';
    }
 }

0

フロントオフィスとバックオフィスの両方に個別の子テーマを作成します


しかし、それはpussleのビットです:skyriter.com/2018/04/07/...
アイ-不思議

このtutoは2歳です。chid管理テーマはスムーズに動作します。それは行くあなたのCSSやJSのためにそれにライブラリを追加し、ここに
Matoeil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.