Выбор цветовой схемы в настройках темы

Для добавления выбора цветовой схемы темы в друпале имеется модуль color. Но возможно также и создать собственные настройки в своей теме для выбора цветовой схемы, для которой в css файле заранее описаны стили. Самый простой вариант, в зависимости от настроек темы, добавлять тегу body уникальный для каждого цвета класс. Для этого нужно внести в тему следующие изменения:

Добавим в форму настроек темы селект с выбором цветовой схемы. Для этого создаем в папке с темой файл theme-settings.php и туда добавляем код:


/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYTHEME_form_system_theme_settings_alter(&$form, &$form_state) {
  $form['theme_color_config'] = array(
    '#type' => 'fieldset',
    '#title' => t('Color Theme Settings'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['theme_color_config']['theme_color_scheme'] = array(
    '#type' => 'select',
    '#title' => t('Choose a color scheme'),
    '#default_value' => theme_get_setting('theme_color_scheme'),
    '#options' => array(
      'black' => t('Black'),
      'purple' => t('Purple'),
      'orange' => t('Orange'),
      'green' => t('Green'),
      'blue' => t('Blue'),
      'red' => t('Red'),
      'gray' => t('Gray'),
      'pink' => t('Pink'),
    ),
  );
}

В файле themename.info добавляем настройку по-умолчанию:


name = themename
description = theme description
core = 7.x
engine = phptemplate

; CSS --------------------
; Regions --------------------
; Features --------------------

; Theme default settings --------------
settings[theme_color_scheme]  = blue

И в завершение в файле template.php добавляем в препроцессе тегу body соответствующий цветовой гамме класс:


/**
 * Implements hook_preprocess_html().
 */
function MYTHEME_preprocess_html(&$vars) {
  $color_scheme = theme_get_setting('theme_color_scheme');
  // Добавляем класс с установленным цветом в тег body
  $vars['classes_array'][] = drupal_html_class('color-scheme-' . $color_scheme);
}

В результате для css имеем в наличии селекторы body.color-scheme-black, body.color-scheme-red, body.color-scheme-blue и так далее. На основе этих классов можно стилизовать любой элемент страницы в соответствии с выбранной цветовой схемой.