Вы здесь

Определение

Определение темы

Тема это набор файлов, которые определяют выводимые на страницу данные, оформление и взаимодействие с ними. Всё, что нужно Друпалу для того, чтобы увидеть тему, это .info-файл. Если нужно, здесь могут быть определены метаданные, стили, скрипты, регионы и другие параметры. Все другие файлы, такие как шаблоны, стили, скрипты и другие, являются необязательными и служат для детальной настройки темы.

Именование темы

Название .info-файла определяет и системное название темы. Системное название темы соответствует названию .info-файла. Например, если файл называется drop.info, то Друпал будет считать, что системное название темы это drop.

В связи с тем, что системное название темы используется в названиях функций, на системное название накладываются стандартные для PHP ограничения (us3.php.net/manual/en/language.functions.php):

  • Название должно начинаться с буквы
  • Можно использовать только латинские буквы
  • Можно использовать цифры
  • Можно использовать знак подчёркивания

Все остальные знаки, включая дефис, пробел, знаки пунктуации и так далее, использовать нельзя.


Для тем .info-файлы стали использоваться начиная с Друпала 6, в Друпале 5 .info-файлы использовали только модули, а тема получала системное название по названию папки в которой она находилась.

Параметры темы

Правила записей в .info-файле похожи на правила для .ini-файлов. Строка начинается с записи ключа, потом используется знак = и затем вводится значение ключа, то есть запись выглядит подобным образом:

key = value

.info-файл — это текстовый файл определяющий статические параметры темы, причём большинство параметров этого файла являются дополнительными.

Содержание .info-файла кешируется в базе данных (не путайте кеш темы с реестром темы). Таким образом, после внесения изменений связанных с добавлением или удалением ключа и его значения, нужно очистить кеш темы.

В разделе управления сайтом различные параметры темы могут быть включены или выключены на странице темы. Например можно выключить вывод миссии сайта, просто сняв отметку с поля «Миссия». Все эти параметры будут доступны или недоступны на этой странице в зависимости от того, определено ли их использование в разделе features[]. Если соответствующая возможность определена, то она будет доступна на странице настройки темы.

Применение параметров

Когда в теме не определены параметры которые могут использоваться в .info-файле, то используются параметры по умолчанию.

Параметры, которые определены, применяются группами. Например, если в .info-файле определён 1 регион с использованием группы regions[], то все 5 значений этой группы определённые по умолчанию применяться уже не будут, будет применяться только этот 1 определённый регион. Если .info-файл не содержит ни одной записи для группы regions[], то будет применена вся группа параметров по умолчанию состоящая 5 значений.

Комментарии

Изображение пользователя Санхип

Пытаюсь добавить два региона через файл инфо. Прописываю, загружаю сайт - страницу выбора тем (для обновления кеша). Выдает ошибку:
# warning: Invalid argument supplied for foreach() in S:\home\sitename\www\includes\theme.inc on line 463.
# warning: Invalid argument supplied for foreach() in S:\home\sitename\www\includes\theme.inc on line 468.

эти строки:
463: foreach ($theme->info['stylesheets'] as $media => $stylesheets) {
468: foreach ($theme->info['scripts'] as $script => $path) {

Когда ставлю другую тему по умолчанию, эти две ошибки остаются. Стоит убрать в моей теме в файле инфо определения регионов, проблема исчезает.

Более того, когда моя тема стоит по умолчанию и прописаны мои регионыЮ выдает еще три ошибки:
# warning: array_map() [function.array-map]: Argument #2 should be an array in S:\home\sitename\www\modules\system\system.module on line 975.
# warning: array_keys() [function.array-keys]: The first argument should be an array in S:\home\sitename\www\includes\theme.inc on line 1760.
# warning: Invalid argument supplied for foreach() in S:\home\sitename\www\includes\theme.inc on line 1760.

if (!array_key_exists($theme_key, $list)) {
$info = unserialize(db_result(db_query("SELECT info FROM {system} WHERE type = 'theme' AND name = '%s'", $theme_key)));
975: $list[$theme_key] = array_map('t', $info['regions']);
}

1760: foreach (array_keys($regions) as $region) {

Я пхп очень слабо понимаю. Помогите. Что сделать, чтоб мои регионы нормально работали?

Изображение пользователя gildor

Покажите ваш вайл .info
Скорее всего в нем ошибка.

Изображение пользователя Separator@drupal.org

Если в .info файле регионы не указаны, то обязательно укажите стандартные:

  • regions[left] = Left sidebar
  • regions[right] = Right sidebar
  • regions[content] = Content
  • regions[header] = Header
  • regions[footer] = Footer

А потом уже свои:

  • regions[...] = ...
  • regions[...] = ...
Изображение пользователя Анонимно

2Санхип: Такая ошибка у меня выскакивала когда пытался использовать дескрипшн на русском языке

Изображение пользователя Анонимно

такая ошибка появляется, если кодировка .info файла не utf-8.