УрокИндивидуальные настройки темы в Drupal 7

Как добавлять настройки в тему для Drupal 6 уже всем давно известно. Теперь поговорим о том, как это сделать для Drupal 7. Система этих настроек упростилась и стала более логичной и понятной. Итак, по порядку.

Первым шагом в корне темы надо создать файл theme-settings.php. В нём надо имплементировать хук, который изменяет форму с настройкой темы по умолчанию (да да, в седьмом Друпале в теме можно изменять формы при помощи alter хука!). Пример:

<?php
 
/**
 * Implements hook_form_FORM_ID_alter().
 */
function ИМЯТЕМЫ_form_system_theme_settings_alter(&$form, &$form_state) {
  $form['foo_example'] = array(
    '#type'  => 'textfield',
    '#title'  => t('Widget'),
    '#default_value' => theme_get_setting('foo_example'),
    '#description'   => t('Place this text in the widget spot on your site.'),
  );
}

Этот небольшой кусок кода добавляет к настройкам темы текстовое поле с заголовком Widget. Обращаю внимание на то, что ключ массива $form должен называться так же, как передаваемое значение в функцию theme_get_setting(). В нашем случае это foo_example.

Значение настроек по умолчанию

Если раньше их надо было генерировать в коде, а потом объединять с полученными, то теперь всё прозрачнее. Все настройки темы по умолчанию вынесены в info файл темы, в секцию settings. Для примера покажу файл garland.info из темы Garland:

name = Garland
description = A multi-column theme which can be configured to modify colors and switch between fixed and fluid width layouts.
package = Core
version = VERSION
core = 7.x
 
stylesheets[all][] = style.css
stylesheets[print][] = print.css

settings[garland_width] = fluid

В нашем случае (с foo_example) это смотрелось бы так:

settings[foo_example] = Любой текст или число

Использование настроек темы

Используются настройки просто - в любом месте вызовите функцию theme_get_setting() с нужным параметром. Пример:

/**
 * Implements template_preprocess_page()
 */
function ИМЯТЕМЫ_preprocess_page(&$vars) {
  $vars['foo_var'] = theme_get_setting('foo_example');
}

После выполнения этих действий у вас в page.tpl.php появится переменная $foo_bar, которую можно будет менять в настройках темы по адресу admin/appearance/settings/ИМЯТЕМЫ.

Комментарии

Аватар пользователя MainVisor
MainVisor написал:

Только в page.tpl.php ?

Статья интересная и нужная. Расскажите а как менять CSS файлы. Это актуальнее.

15.12.2011 15:56
Аватар пользователя SplasH
SplasH написал:

theme_get_setting() можно использовать в любых шаблонах. Про css позже напишу.

18.12.2011 15:12
Аватар пользователя Гость
Гость написал:

Функция theme_get_settings() была изъята из Drupal 7 API, если вы ещё не в курсе.
Вместо неё - theme_get_setting($setting_name, $theme = NULL) с извлечением только определённого параметра.

06.01.2012 06:03
Аватар пользователя SplasH
SplasH написал:

Я-то в курсе, случайно по привычке s дописывал. Спасибо.

06.01.2012 14:17
Аватар пользователя Гость
Гость написал:

А не могли бы вы показать, как через настройки темы загружать картинки, а потом выводить в page.tpl.php (как загружается, логотип)

26.01.2012 13:42

Комментировать

                                                                              
,ad8888ba, 88888888ba, 888888888888 88888888ba, 8b d8
d8"' `"8b 88 `"8b ,8P' 88 `"8b Y8, ,8P
d8' 88 `8b d8" 88 `8b `8b d8'
88 88 88 ,8P' 88 88 Y88P
88 88888 88 88 d8" 88 88 d88b
Y8, 88 88 8P ,8P' 88 8P ,8P Y8,
Y8a. .a88 88 .a8P d8" 88 .a8P d8' `8b
`"Y88888P" 88888888Y"' 8P' 88888888Y"' 8P Y8

Enter the code depicted in ASCII art style.