Làm cách nào để ghi đè chủ đề quản trị viên trong chủ đề của riêng tôi?


9

Tôi đã tạo chủ đề Drupal 8 của riêng mình:

huyền thoại.info.yml:

name: My Theme
description: 'Drupal 8 Theme'
type: theme
base theme: bartik
core: '8.x'

huyền thoại. Thư viện.yml

global-styling:
  version: 1.x
  css:
    theme:
      css/layout.css: {}
      css/style.css: {}
      css/colors.css: {}
      css/print.css: { media: print }

Tôi đang sử dụng "Seven" làm chủ đề quản trị viên.

Khi tôi chỉnh sửa một trang (/ node / x / edit) Bảy chủ đề được sử dụng.

Bây giờ tôi phải thêm một số CSS vào mẫu chỉnh sửa. Tôi có thể làm cái này như thế nào? style.css chỉ được tải trên các trang đầu. Chỉnh sửa trang sử dụng bảy chủ đề và CSS chủ đề của tôi bị bỏ qua.

Làm cách nào tôi có thể thêm một số CSS vào trang quản trị hoặc chỉnh sửa biểu mẫu trong Drupal 8?

Câu trả lời:


17

Bạn có thể thêm CSS quản trị từ một móc mô-đun. Thay thế XXX bằng tên mô-đun.

1 Đặt CSS của bạn vào css / Extra.admin.css

2 Khai báo thư viện bằng cách tạo XXX.l Library.yml

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

3 Tạo một cái móc để tải thư viện.

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

Bạn không thể kiểm soát một chủ đề từ trong một chủ đề khác. Và ngay cả khi một số nhà phát triển thông minh có thể tìm ra cách thức táo bạo để làm điều đó: xin đừng. Tin tôi đi, bạn không muốn nó đâu. Khái niệm phân tách mối quan tâm là quan trọng trong lập trình. Về cơ bản, điều đó có nghĩa là các bộ phận chuyển động khác nhau (ví dụ: chủ đề của bạn) trong hệ thống của bạn nên tự lo nhiệm vụ của mình, mà không can thiệp vào các nhiệm vụ của các bộ phận khác (ví dụ như chủ đề quản trị viên của bạn).

Để đạt được mục tiêu của bạn, cách sạch nhất là tạo một chủ đề mới, biến nó thành một mô hình con của Seven (để nó kế thừa mọi thứ bạn thích về Seven) và thêm CSS tùy chỉnh của bạn vào hỗn hợp. Bây giờ bạn có thể chọn chủ đề đó làm chủ đề quản trị viên thay vì Seven.


Xin lỗi, tôi không thể tin rằng không có cách nào để giải quyết điều này. Tôi chỉ phải thêm một số CSS như img {max-width: 100%; chiều cao: tự động}. Chắc chắn phải có cách.
drupalfan

4
Không, không phải. Chủ đề không có nghĩa là để trộn. Chỉ có thể có một chủ đề hoạt động. Nếu bạn cần làm điều đó, hãy tạo một mô-đun, có thể thực hiện thay đổi biểu mẫu và thêm một thư viện khác.
Berdir

3
@drupalfan, tôi không hiểu tại sao bạn kết luận không có cách nào để giải quyết vấn đề này. Có nhiều cách (phương pháp Seven-subtheme tôi đã mô tả và phương pháp của Berdir) và chúng không khó thực hiện. Loại giải pháp bạn đề xuất, giống như yêu cầu thợ làm tóc thay đổi màu giày. Đừng làm điều đó.
marcvangend

2
I do not want to mix themes, I only want to add one simple CSS!đó được coi là pha trộn trong Drupal. Tùy chọn duy nhất bạn có là tạo một mô hình con của Seven hoặc "hack" bảy chủ đề trong đó /core/themes/nhưng bạn sẽ mất các thay đổi mỗi khi nâng cấp drupal 8. Vì vậy, bạn sẽ phải nhớ tải lên tệp .css bị ghi đè mỗi lần bạn nâng cấp D8. Do đó, tốt hơn hết bạn nên tạo một chủ đề phụ của Seven và sử dụng chủ đề đó làm chủ đề quản trị viên, bởi vì tiểu thư sẽ nằm trong /themesthư mục chứ không phải bên trong /core/themes.
Không có Sssweat

1
@Joum Những gì bạn mô tả, là hoàn toàn khác nhau. OP đã hỏi về việc để một chủ đề ảnh hưởng đến chủ đề khác. Đó là pha trộn trách nhiệm, đặc biệt là vì hai chủ đề không bao giờ có thể hoạt động trên cùng một trang. Vận chuyển một số CSS với một mô-đun là IMO hoàn toàn bình thường - chỉ cần giữ cho nó có trọng lượng nhẹ, có thể ghi đè và tập trung nghiêm ngặt vào bất cứ thứ gì mà mô-đun của bạn làm.
marcvangend

5

Mô-đun bạn đang tìm kiếm hiện được gọi là In phun tài sản . Với nó, bạn sẽ có thể thêm CSS thông qua giao diện người dùng như @Whatwatt đã đề cập.


4

Nếu bạn tạo một subtheme cho Seven và sử dụng nó làm chủ đề quản trị viên của mình, bạn có thể thêm phần ghi đè css của riêng bạn vào tệp seven_subtheme.info.yml, mà không gây rối với chủ đề cốt lõi hoặc gây nhầm lẫn với trách nhiệm chủ đề. Subtheme chỉ cần có tệp info.yml và css, và sẽ kế thừa mọi thứ khác.

Từ âm thanh của nó, bạn chủ yếu quan tâm đến việc thay đổi css được sử dụng bởi trình soạn thảo wysiwyg (ckeditor), vì vậy bạn có thể muốn xem thêm ckeditor_stylesheetsvào tệp info.yml của mình. Lưu ý rằng, như đã giải thích trong vấn đề này , csseditor css thực sự có thể được thêm vào từ chủ đề của bạn , vì trình soạn thảo wysiwyg nên sử dụng css chủ đề không phải quản trị viên theo mặc định (hãy nhớ xóa bộ nhớ cache sau khi thêm phần này).


Câu trả lời đúng. Đây là cách để làm điều đó.
Kevin

3

Cài đặt mô-đun CSS Injection (hiện tại chỉ có phiên bản phát triển hoạt động cho Drupal 8).

Sau đó đi đến trang quản trị của CSS Injection ( / admin / config / Development / css-kim phun ). Tạo quy tắc CSS mới. Ví dụ: để thay đổi màu nền của trường:

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

Chọn áp dụng quy tắc này trên Bảy chủ đề (hoặc bất kỳ chủ đề quản trị viên nào đang sử dụng).

Lưu và thưởng thức!


>> Làm cách nào tôi có thể thêm một số CSS vào trang quản trị hoặc chỉnh sửa biểu mẫu trong Drupal 8?
drupalfan

Tôi đã cập nhật câu trả lời của mình, xin lỗi vì lỗi của tôi (tôi đã trả lời một chủ đề khác!)
Whatwatt

1

Để làm việc với bất kỳ chủ đề quản trị nào, tôi đã sử dụng câu trả lời của AdamS và thay đổi hook thành.

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

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

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

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

}

1

Tại sao không tạo một khối gọi css và chèn nó vào tiêu đề của các trang quản trị của bạn?

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


1

Bạn có thể thêm CSS quản trị từ một móc mô-đun. Thay thế XXX bằng tên mô-đun.

1 Đặt CSS của bạn vào css / Extra.admin.css

2 Khai báo thư viện bằng cách tạo XXX.l Library.yml

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

3 Tạo một cái móc để tải thư viện.

/ **
* Triển khai 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';
    }
 }

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.