如何以编程方式获取主题名称?


8

在Drupal 8中,是否有办法弄清楚您当前在模块中使用的主题?我需要在模块代码中以编程方式获取名称。

Answers:


22

使用主题管理器是获取有关主题信息的Drupal 8的正确方法。

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

drupal 8中的一般规则是寻找管理器(/处理程序)服务。

**注意:正如Neograph734指出的那样,\Drupal::service('theme.manager')->getActiveTheme()将返回活动主题对象。如果要获取主题机器名称,请使用\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
请注意,实际主题名称可以使用来从ActiveTheme派生getName()。因此,要使用主题名称,可以使用\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734 '17

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,2015年

1
  1. 如果要获得administration theme包括的实际活动主题名称,请使用:

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

  1. 如果你希望你的默认选择的主题theme used in front不能 admistartion theme使用:

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


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.