Аватар пользователя Dima

Программно изменить текущую тему в Drupal 7

Бывают задачи, когда нужно отображать разные разделы сайта с абсолютно разным оформлением. Самым удобним вариантом в этом случае будет програмное переключение текущей темы.
 

Для програмного переключения текущей темы в Drupal 7 можно использовать 2 способа:

  1. для определенного пункта меню указать свойство 'theme callback', которое будет определять название функции обратного вызова (callback), которая в свою очередь будет возвращать название нужной темы:
     
    1.  
    2. function mymodule_menu() {
    3. $itmes['example'] = array(
    4. ...
    5. 'theme callback' => 'example_callback'
    6. ... );
    7. return $items;
    8. }

    И возвращаем машинное имя нужной темы:

    1.  
    2. function example_callback() {
    3. return 'my_theme_name';
    4. }

  2. использовать hook_custom_theme(), который должен вернуть системное имя нужной темы:
    1.  
    2. function mymodule_custom_theme() {
    3. if (TRUE == TRUE) { // :) set some condition here return
    4. 'my_theme_name';
    5. }
    6. }

Важно помнить, что в обоих случаях нужная тема должна быть включена. Также нужно знать что административная тема сайта более приоритетна, для того чтоб происходило переключение темы и в административных разделах сайта (admin* и.т.), можно использовать hook_admin_paths_alter(&$paths), в котором для нужных путей должны стоять значения FALSE.

Комментарии

Спасибо! Помогло

Пожалуйста, обращайтесь.