Làm thế nào tôi có thể lập trình được tên chủ đề?


8

Trong Drupal 8, có cách nào để tìm ra chủ đề nào bạn hiện đang sử dụng trong một mô-đun không? Tôi cần lấy tên theo chương trình trong mã của một mô-đun.

Câu trả lời:


21

Sử dụng trình quản lý chủ đề là cách Drupal 8 thích hợp để nhận thông tin về chủ đề của bạn.

\Drupal::service('theme.manager')->getActiveTheme()

Một quy tắc chung trong drupal 8 là tìm kiếm dịch vụ quản lý (/ handler).

** Lưu ý: như Neograph734 đã chỉ ra, \Drupal::service('theme.manager')->getActiveTheme()sẽ trả về đối tượng chủ đề đang hoạt động . Nếu bạn muốn lấy tên máy chủ đề thì hãy sử dụng\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
Lưu ý rằng tên chủ đề thực tế có thể được lấy từ ActiveTheme với getName(). Vì vậy, để có được tên chủ đề người ta sẽ sử dụng\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734

5

Điều này sẽ làm điều đó:

$config = \Drupal::config('system.theme');    
print $config->get('default');

Bạn luôn có thể sử dụng drush để khám phá các cấu hình có sẵn của bạn:

drush config-list

drush config-list system

cho tôi một danh sách:

...
system.rss
system.site
system.theme.global
system.theme
...

và sau đó tôi có thể kiểm tra như sau:

drush cget system.theme.global

drush cget system.theme

để cuối cùng phát hiện ra rằng nó nắm giữ một defaulttài sản đó là những gì bạn yêu cầu.


4
Câu trả lời này trả về chủ đề mặc định. OP đã yêu cầu chủ đề hiện tại và câu trả lời được chấp nhận trả về chủ đề hiện tại. Thông thường sẽ không có vấn đề gì, nhưng nếu có một mô-đun tự động chọn một chủ đề tùy thuộc vào trang / tên miền / người dùng, v.v. thì sự khác biệt là rất quan trọng.
AdamS

1
Đúng, nếu có một người đàm phán chủ đề tùy chỉnh trong chơi, kết quả sẽ khác nhau. Nếu không, getActiveTheme()chức năng cuối cùng sẽ trở lại giống hệt nhau: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis

1
  1. nếu bạn muốn nhận tên chủ đề hoạt động thực tế administration themebao gồm Sử dụng:

 $activeThemeName = \Drupal::service('theme.manager')->getActiveTheme(); 

  1. nếu bạn muốn chủ đề được chọn mặc định của mình theme used in frontkhông admistartion themesử dụng:

 $defaultThemeName = \Drupal::config('system.theme')->get('default');    


0

Tôi tìm thấy thông qua cách dưới đây trong Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
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.