Theme API к сожалению не даёт прямого метода, чтобы прочитать это значение. Как его получить?
Иногда программно нужно установить, что именно видит пользователь на фронт-енд (какую тему использует движок).
Необходимость возникает из-за того, что drupal, исходя из контекста, может активировать различные темы оформления, доступные сайту.
Страницы админки могут быть показаны в одной теме, страницы сайта — в другой. Разные темы могут быть задействованы также в зависимости от настроек в профиле пользователя. Все ситуации сложно перечислить, рассмотрим хотя бы некоторую часть.
Значение выбранной по умолчанию темы сохраняется в переменной theme_default. Ее не сложно прочитать:
1 |
$theme = variable_get('theme_default'); |
Это значение может быть переопределено в файле конфигурации, поэтому лучше читать его из глобальной переменной $conf:
1 2 |
global $conf; $theme = $conf['theme_default']; |
Следующая возможная зацепка — это тема, установленная в профиле пользователя:
1 2 3 4 5 |
global $user; if (!empty($user->theme)) { $theme = $user->theme; } |
Есть в API специальная зацепка hook_custom_theme, позволяющая программно установить значение текущей темы:
1 2 3 |
function mymodule_custom_theme() { return 'my_theme'; } |
Тогда следует проверить глобальную переменную custom_theme:
1 2 3 4 |
global $custom_theme; if (!empty($custom_theme)) { $theme = $custom_theme; } |
Ну и наконец проверка значения глобальной переменной theme:
1 2 |
global $theme; $current_theme = $theme ? $theme : variable_get('theme_default', 'garland'); |
Как видите, сложно не запутаться в том, какая должна быть последовательность проверки. Потому сведем весь получивший код в один блок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
global $conf, $custom_theme, $theme, $user; if (!empty($user->theme)) { // сначала проверим настройки пользователя $current_theme = $user->theme; } elseif (!empty($custom_theme)) { // проверим программную смену темы $current_theme = $custom_theme; } elseif ($theme) { // глобальная переменная темы $current_theme = $theme; } elseif ($conf['theme_default']) { // дефолт тема из конфигурации $current_theme = $conf['theme_default']; } else { // значение по умолчанию или базовая тема, например garland $current_theme = variable_get('theme_default', 'garland'); } |
Что учитывать в вашем проекте — выбирать вам.