프로그래밍 방식으로 테마 이름을 얻으려면 어떻게해야합니까?


8

Drupal 8에는 현재 모듈에서 어떤 테마를 사용하고 있는지 파악할 수있는 방법이 있습니까? 모듈 코드 내에서 프로그래밍 방식으로 이름을 가져와야합니다.

답변:


23

테마 관리자를 사용하는 것은 테마에 대한 정보를 얻는 적절한 Drupal 8 방법입니다.

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

drupal 8의 일반적인 규칙은 관리자 (/ handler) 서비스를 찾는 것입니다.

** 참고 : Neograph734가 지적했듯이 활성 테마 객체를\Drupal::service('theme.manager')->getActiveTheme() 반환 합니다 . 테마 machine-name을 얻으려면 다음을 사용하십시오.\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
실제 테마 이름은로 ActiveTheme에서 파생 될 수 있습니다 getName(). 테마명을 얻으려면\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734

5

이것은 그것을 할 것입니다 :

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

항상 drush를 사용하여 사용 가능한 구성을 탐색 할 수 있습니다.

drush config-list

drush config-list system

나에게 목록을 주었다 :

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

그런 다음 다음을 확인할 수 있습니다.

drush cget system.theme.global

drush cget system.theme

마침내 default당신이 요구 했던 재산을 소유하고 있음을 알게되었습니다.


4
이 답변은 기본 테마를 반환합니다. OP가 현재 테마를 요청했으며 허용 된 답변이 현재 테마를 반환합니다. 일반적으로 중요하지 않지만 페이지 / 도메인 / 사용자 등에 따라 테마를 동적으로 선택하는 모듈이있는 경우 차이점이 중요합니다.
AdamS

1
사실, 커스텀 테마 협상자가 작동하면 결과가 달라집니다. 그렇지 않은 경우, getActiveTheme()함수는 정확히 같은 결과를 반환합니다 : $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis

1
  1. 실제 활성 테마 이름을 administration theme포함하려면 다음을 사용하십시오.

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

  1. 기본 선택된 테마 theme used in frontadmistartion theme사용 하지 않으 려면 :

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.