Вы здесь

Часть вторая. Определение параметров и компонентов темы

 

Определение параметров и компонентов темы

В этом уроке объясняется как задать структуру темы, названия регионов и их количество, стили, и javascript, с помощью редактирования файла .info. В файле .info так же задается какие настройки темы будут доступны из интерфейса администратора. Так как файл .info кешируется, перед тем как увидеть какие-либо изменения, - очистите кеш. О файле .info В Drupal 6, каждая тема должна иметь файл .info в своей папке. Без него тема не будет видна из Drupal. Файл .info должен иметь расширение «.info». Машинное имя берется из названия темы. Например, если файл называется "drop.info", тогда Drupal определит имя как "drop". Имя должно начинаться с буквы, и не содержать пробелов, и знаков препинания. Разрешен знак подчеркивания, но не тире. Разрешены цифры, но они не должны стоять первыми.

Примечание: Внимание! Модули с тем же названием что и темы, могут помешать сайту функционировать. Это может привести к дублированию имен функций, что запрещено в PHP. Все установленные компоненты должны иметь уникальные имена. Для создаваемых тем рекомендуется использовать уникальный префикс, например у сайта example.com может быть тема ex_themename.

Под-темы, их структура и наследование

Под- темы не отличаются от обычных тем ничем, кроме одного: они наследуют ресурсы родительской темы. Лимита на длину цепочки подключений под-тем к родителям нет. Под-тема может быть родителем другой под-темы, разветвляйте и организовывайте это как вам удобно. Из этого вытекает большой потенциал под-тем. sub-theme_branching.png Представьте себе: создаете основную тему-каркас, а детали и улучшения прикручиваете в под-теме. Можно создать ответвление в котором будет тестироваться другой дизайн. Используете мульти-сайтинг, но хотите что бы все сайты были в одном стиле? Легко. С помощью под-тем можно объединить многие дизайнерские ресурсы. Изменения специфичные для одного сайта, могут быть внесены в его под-тему, но если придется поменять что то везде разом, просто подправьте тему-родителя. При правильном планировании, возможности безграничны. Для закрепления базовой темы, нужно включить в файл .info команду base theme, например что бы задать для текущей темы базовую тему " themeName", включите в файл следующую строку: base theme = themeName Что наследуется:

  • Все стили включенные в базовую тему, хотя это можно контролировать.
  • Все ява-скрипты включенные в базовую тему.
  • Все шаблоны (.tpl.php).
  • Все что определенно в файле "template.php". Это включает в себя переопределения функций, препроцессоры, и все остальное. Каждая под-тема может включать включать и свой template.php, вместе с родительским.
  • Скриншот темы родителя, пока файл .info использует те же настройки, что и родительский.

Что не наследуется:

  • logo.png установленный для данной темы. Это не распространяется на загруженные логотипы, так как они используются всегда.
  • Некоторые настройки установленные в .info. Например регионы. Если вы не используете регионы создаваемые по умолчанию, убедитесь что регионы в "page.tpl.php" под-темы, совпадают с тем, что установлено в файле .info. Базовая и под-темы могут использовать свои настройки регионов.
  • Все что заданно в "theme-settings.php".
  • Все что задано в папке color для поддержки модуля color.

Заметьте, что под-тема может быть помещена как в папке базовой темы, так и не в ней. До 6 версии, под-темы должны были находиться в папке базовой темы.

Структура файла .info

Синтаксис очень похож на структура файлов INI. Файл .info — это статичный текстовый файл, предназначенный для настройки темы. Каждая строка в нем, это ключ и значение, разделенные знаком равенства (например: key = value). Текст после точки с запятой, это комментарии. Некоторые ключи используют специальный синтаксис; они используют квадратные скобки для построения массивов. Если вы не знакомы с массивами, их использование должно быть понятным по примерам. Drupal понимает ключи приведенные ниже. Значения по умолчанию будут использоваться для необязательных ключей, не записанных в файле.

  • name обязательно
  • description рекомендовано
  • screenshot
  • version нежелательно
  • core обязательно
  • engine обязательно в большинстве случаев
  • base theme
  • regions
  • features
  • stylesheets
  • scripts
  • php

name (обязательно) Имя темы предназначенное для людей, теперь может быть задано отдельно от машинного, это накладывает меньше ограничений на используемые символы. name = A fantasy name description (рекомендовано) Короткое описание темы. Оно отображается на странице выбора темы "Administer > Site building > themes". description = Tableless multi-column theme designed for blogs. screenshot Необязательный ключ — screenshot, говорит Drupal где искать миниатюрное отображение темы, используемое на странице выбора темы (admin/build/themes). Если параметр пропущен, Drupal использует файл "screenshot.png" расположенный в папке темы. Используйте этот параметр только в случае, если ваш скриншот называется не «screenshot.png», или если вы хотите поместить скриншот вне папки темы (например screenshot = images/screenshot.png ) screenshot = screenshot.png version (нежелательно) Ключ version будет добавлен автоматически drupal.org, когда вы выложите тему. Так что вы можете пропустить этот параметр в темах бесплатно выложенных для сообщества. Однако, если вы не собираетесь выкладывать тему на drupal.org, вы можете задать своей теме любое значение version. version = 1.0 core (обязательно) Начиная с 6 версии, все файлы .info, должны указывать с какой версией ядра они совместимы. Указанное значение сравнивается с DRUPAL_CORE_COMPATIBILITY. Если они не совпадают, тема отключается. core = 6.x Архивирующий скрипт Drupal org выставляет это значение автоматически, в зависимости от совместимости каждого релиза ядра Drupal. Так что у тем загружаемых с Drupal org это значение всегда правильно. engine (обязательно в большинстве случаев) Движок используемый темой. Если ничего не указанно, считается что тема использует движок по умолчанию. Большинство тем использует движок "phptemplate". PHPTemplate определяет функции темы, и ее поведение. Пропустите этот параметр, если не понимаете для чего он. engine = phptemplate base theme Под-темы указывают базовую тему. Это позволяет под-теме использовать ресурсы базовой темы. По-темы могут указывать другие по-темы в качестве базовых тем, создавая множественное наследование. Используйте машинное имя темы, для указания базовой темы. Это использовано в теме Minnelli, под-теме темы Garland. base theme = garland Больше информации доступно в разделе со структурой под-тем. regions Регионы можно задать в теме с помощью ключа 'regions', за которым должно идти машинное имя региона в квадратных скобках, и после знака равенства имя показываемое людям, т.е. Если не определен ни один регион, будут использованы значения по умолчанию. Вы можете переписать значения под ваши нужды. regions[left] = Left sidebar regions[right] = Right sidebar regions[content] = Content regions[header] = Header regions[footer] = Footer features Разные элементы страницы могут быть выключены или включены, для изменения на странице настройки темы. Ключ "features" задает какие из чекбоксов будут отображены на странице настройки темы. Можно выключить элементы не используемые данной темой. Что бы убрать какой-либо чекбокс, пропустите строчку с его определением. Однако, если не будет определенно ни одного, будут выведенны все чекбоксы. Приведенный ниже пример, показывает выводом чего можно управлять. primary_links и secondary_links не будут показаны администратору, так как их вывод за комментирован. features[] = logo features[] = name features[] = slogan features[] = mission features[] = node_user_picture features[] = comment_user_picture features[] = search features[] = favicon ; These last two disabled by redefining the ; above defaults with only the needed features. ; features[] = primary_links ; features[] = secondary_links stylesheets По традиции, тема использует файл style.css, но есть возможность добавить стили с помощью вызова drupal_add_css() в файле template.php. Начиная с 6 версии, стили так же можно добавить в файле .info. stylesheets[all][] = theStyle.css scripts По традиции, есть возможность добавить javascript с помощью вызова drupal_add_js() в файле template.php. Начиная с 6 версии, файл script.js включется автоматически (если существует в папке темы). Так же, javascript можно добавить в файле .info. scripts[] = myscript.js php Определяет минимальную версию php, которую поддерживает тема. Значение по умолчанию равно константе DRUPAL_MINIMUM_PHP, которая задает минимальную версию PHP для ядра. Это может быть переопределено при необходимости. Должно быть добавленно для большинства тем. php = 4.3.3

Примеры файлов .info из тем ядра

info_display.png

Garland:

$Id: garland.info, v 1.5 2007 / 07 / 01 23: 27: 32 goba Exp $ 
name = Garland description = Tableless, recolorable, multi - column, fluid width theme(default).
version = VERSION 
core = 6. x 
engine = phptemplate 
stylesheets[all][] = style.css 
stylesheets[print][] = print.css;

Information added by drupal.org packaging script on 2008 - 02 - 13 version = "6.0"
project = "drupal"
datestamp = "1202913006"
Minnelli под - тема темы Garland.: ;
$Id: minnelli.info, v 1.7 2007 / 12 / 04 20: 58: 44 goba Exp $ name = Minnelli description = Tableless, recolorable, multi - column, fixed width theme.version = VERSION core = 6. x base theme = garland stylesheets[all][] = minnelli.css;
Information added by drupal.org packaging script on 2008 - 02 - 13 version = "6.0"
project = "drupal"
datestamp = "1202913006"

Заметьте, что все после "; Information added by drupal.org packaging script on 2008-02-13" и ниже, это информация добавленная drupal.org. Вам не нужно добавлять это вручную.

Значения файла .info используемые по умолчанию

Когда значения не определенны, темы использует приведенные ниже. Примечание: эти значения переопределяются все сразу. То есть, если вы задали регион regions[sub_header] = Sub-header, то он затрет все регионы создаваемые по умолчанию. Для их возвращения, их нужно будет переопределить. Это так же работает и со стилями.

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

features 
features[] = logo 
features[] = name 
features[] = slogan 
features[] = mission 
features[] = node_user_picture 
features[] = comment_user_picture 
features[] = search 
features[] = favicon 
features[] = primary_links 
features[] = secondary_links 

stylesheets 
stylesheets[all][] = style.css 

scripts 

scripts[] = script.js 

screenshot 
screenshot = screenshot.png

 php (минимальная поддержка) DRUPAL_MINIMUM_PHP — это константа, она задает минимально необходимую версию PHP для ядра Drupal php = DRUPAL_MINIMUM_PHP

Назначаем регионам содержимое

Регион — это область в теме, в которую можно вставлять блоги и другое содержимое. Регионы доступные в теме, задаются в файле .info. Регионы задаются с помощью ключа 'regions', за которым должно идти машинное имя региона в квадратных скобках, и после знака равенства имя показываемое людям, т.е. Если не определен ни один регион, будут использованы значения по умолчанию. regions[left] = Left sidebar regions[right] = Right sidebar regions[content] = Content regions[header] = Header regions[footer] = Footer Запомните, что внутренние имена регионов, автоматом конвертируются в имена переменных в шаблоне "page.tpl.php". В приведенном выше примере, регион [left] будет выводить все назначенные ему блоки, через переменную $left. Есть некоторые ограничения, на имена задаваемые переменным PHP, убедитесь что внутренние/машинные имена соответствуют этим ограничениям. Основные ограничения состоят в том, что имя должно содержать только цифры, буквы и знак нижнего подчеркивания, первым символом должна быть буква. Человеко-читаемые имена задаваемые в скобках, используются для обозначения региона на странице "Administer > Site building > Blocks". Вот страница Blocks для тему Garland: block_config_garland.png

Примечания:

  • Для вывода каждого блока можно создать свой шаблон (.tpl.php)
  • Добавление пользовательского региона, затрет регионы «по умолчанию». Если вы хотите их сохранить, добавьте их вручную.
  • Порядок в котором определенны регионы сохранится на странице "Administer > Site building > Blocks". Например, Garland использует регионы по умолчанию, подметьте порядок вывода регионов на картинке.
  • Тело страницы выводится в файле page.tpl.php (или его производных) через переменную $content. Если в теме задан регион "content", то все блоки назначенные ему, будут выводиться через эту же переменную.

Файл .info кешируется, поэтому Drupal не заметит его изменения. Для очистки кеша, можно сделать следующее:

  1. Кликните по "clear all cached data" на странице "Administer > Site configuration > Performance".
  2. Если включен блок Devel (идет с модулем Devel), нажмите "Empty cache".
  3. Зайдите на страницу "Administer > Site building > Themes".

Примечания по обновлению:

  • В Drupal 5 и более ранних версиях, регионы задаются с помощью hemeName_regions() или EngineName_regions(). Это не актуально для Drupal 6.
  • Если бы обновляете вашу тему до версии Drupal 6, и в ней есть регионы $sidebar_left и $sidebar_right, переименуйте их в $left и $right.
  • В версиях до 6, переменная $footer_message объединяла регион footer с footer message (задается в "Administer > Site configuration > Site information"). Убедитесь что отдельная переменная $footer создана (если ваша тема использует ее), начиная с 6 версии эти 2 элемента уже не объединяются.

Присвоение содержимого регионам вручную Содержимое может быть присвоено регионам вручную, с помощью drupal_set_content(). Например, drupal_set_content('header', 'Приветствую!') выведет 'Приветствую!', в регионе header. Приведем более полезный пример, и попробуем вывести сумму всех комментариев в регионе right. Измените префикс "drop" на название вашей темы. Больше информации на странице preprocessors subject, comment_node_url(), array('fragment' => "comment-$comment->cid") ); $new_marker = $comment->new ? t('new') : ''; $by_line = t('by') .' '. theme('username', $comment); // формируем разметку $summary = '

'; $summary .= '' . "$title $new_marker"; $summary .= '' . "$by_line"; $summary .= '

'; // Вставляем все в регион drupal_set_content('right', $summary); } ?> Данная функция должна вызываться до того как получены блоки региона, это вызывается с помощью template_preprocess_page > theme_blocks > drupal_get_content.

Проверка занятости региона

Проверив содержание соответствующей переменной, можно узнать- пуст ли регион, и если нет, то что содержит. Однако, переменные регионов не определены в шаблонах на уровне блока, ноды и вида. Что бы это поправить, я адаптировал часть кода block.module, и создал функцию которая может быть помещена в template.php. У функции один параметр (имя региона), она возвращает 1, если регион пуст, или 0 в обратном случае. Функция учитывает текущий путь, и настройки видимости блока. 0) { while ($node = db_fetch_object($result)) { if ($node->visibility < 2) { $path = drupal_get_path_alias($_GET['q']); $page_match = drupal_match_path($path, $node->pages); if ($path != $_GET['q']) { $page_match = $page_match || drupal_match_path($_GET['q'], $node->pages); } // Когда $block->visibility равно 0, блок показывается // на всех страницах, кроме заданных в $block->pages. Если 1, то //показывается только на страницах заданных в $block->pages. $page_match = !($node->visibility xor $page_match); } else { $page_match = drupal_eval($block->pages); } if ($page_match) $test_empty = 0; } } return $test_empty; } ?>

Делаем настройки доступными на странице администрирования.

Разные элементы страницы выводимые темой, могут выключаться или включаться на странице настройки темы расположенной в "Administer > Site building > Themes > themeName". Например, если снять галочку "Site slogan", то вывод слогана будет подавлен. features_enabled.png Эти флажки отображаются, если они включены в файле .info. Они задаются ключом 'features' после которого идут пустые скобки, те. features[] = the_feature. Если ничего не заданно, разрешены следующие чекбоксы features[] = logo features[] = name features[] = slogan features[] = mission features[] = node_user_picture features[] = comment_user_picture features[] = search features[] = favicon features[] = primary_links features[] = secondary_links Что бы выключить ненужные функции, добавьте нужные в файл .info. Задание нужных функций, выключит остальные. Некоторые функции так же включают связанные формы. Например, 'logo' сделает доступной форму загрузки логотипа. Файл .info кешируется, поэтому Drupal не заметит его изменения. Для очистки кеша, можно сделать следующее:

  1. Кликните по "clear all cached data" на странице "Administer > Site configuration > Performance".
  2. Если включен блок Devel (идет с модулем Devel), нажмите "Empty cache".
  3. Зайдите на страницу "Administer > Site building > Themes".
  4. hook_features() больше не поддерживается.

Расширенные настройки темы

Каждая тема имеет страницу настройки, она находится в admin/build/themes/settings/themeName. И на этой странице есть форма со стандартными опциями типа “Logo image settings” и “Shortcut icon settings.” В Drupal 6 автор темы может разнообразить эту страницу добавлением дополнительных настроек. В Drupal 5 нужно установить модуль Theme Settings API прежде чем использовать метод описанный ниже.

Добавляем форму-виджет для любых настроек темы.

Первоначально нужно создать файл theme-settings.php в директории вашей формы, и добавить функцию themeName_settings() или themeEngineName_settings(). themeEngineName_settings() предпочтительнее, потому что позволяет другим пользователям проще создавать темы основанные на вашей. Для создания дополнительных форм, нужно использовать Forms API. Например, для добавления настроек в тему Garland, нужно создать файл theme-settings.php, и добавить туда функцию garland_settings(). Если пользователь ранее сохранял форму настроек темы, сохраненные значения будут доступны в функции через параметр $saved_settings. Виджеты добавляемые к форме должны быть возвращены как массив Forms API. Комментарии в примере объясняют детали: 1, 'garland_shoes' => 0, ); // Объединим сохраненные переменные, и их значения по умолчанию $settings = array_merge($defaults, $saved_settings); // создаем форму-виджет с помощью Forms API $form['garland_happy'] = array( '#type' => 'checkbox', '#title' => t('Get happy'), '#default_value' => $settings['garland_happy'], ); $form['garland_shoes'] = array( '#type' => 'checkbox', '#title' => t('Use ruby red slippers'), '#default_value' => $settings['garland_shoes'], ); // Возвращаем дополнительную форму-виджет return $form; } ?> Автор темы может создавать комплексные, динамические формы с помощью Forms API (авто-дополнение, сворачивающиеся списки) и JQuery javascript.

Получение значений опций в файлах вашей темы.

для получения значений в template.php или шаблонах .tpl.php нужно использовать функцию theme_get_setting('varname'). Ищите детали в Drupal API: Например:

Инициализация значений по умолчанию

Поскольку мы не можем быть уверенны что пользователь зайдет на страницу admin/build/themes/settings/themeName, мы должны убедиться что значения по умолчанию для наших настроек будут инициализированы. Переменные настроек темы не будут установлены до тех пор, пока мы не передадим форму admin/build/themes/settings/themeName в первый раз, поэтому в файле template.php нужно проверить заданны ли переменные. Если не заданны, нужно присвоить им значения по умолчанию. Мы поймем это проверив не пуста ли одна из переменных. Если пуста, мы зададим значения по умолчанию с помощью variable_set(), и обновим настройки Drupal с помощью theme_get_setting('', TRUE). Добавьте этот код в начале вашего template.php: 1, 'garland_shoes' => 0, ); // Получаем значения настройки темы по умолчанию. $settings = theme_get_settings($theme_key); // Не сохраняем toggle_node_info_ variables. if (module_exists('node')) { foreach (node_get_types() as $type => $name) { unset($settings['toggle_node_info_' . $type]); } } // Сохраняем значения настройки темы по умолчанию. variable_set( str_replace('/', '_', 'theme_'. $theme_key .'_settings'), array_merge($defaults, $settings) ); // Обновляем настройки Drupal силой theme_get_setting('', TRUE); } ?> Переменная с именем “garland_happy” в первой строке, должна быть заменена на вашу переменную из файла theme-settings.php.

Добавление настроек в новую версию вашей темы.

После выпуска 1.0 версии вашей темы, вы, возможно, решите добавить некоторые дополнительные настройки в версию 2.0. Обратите внимание на код инициализации в 3 шаге:

  1. В файле theme-settings.php добавьте новые настройки в переменные $defaults и $form.
  2. В файле template.php добавьте настройки в переменную $defaults в коде инициализации настроек темы.
  3. В файле template.php обновите код инициализации что бы проверить наличие одной из новых настроек темы. Например, если вы добавили несколько настроек, и в их числе настройку garland_slippers, нужно изменить первую строчку кода инициализации настроек темы на:

if (is_null(theme_get_setting('garland_slippers'))) { Это будет служить гарантией, что значения по умолчанию для новых настроек, сохранены вместе со значениями старых настроек. Интегрируем модуль color Модуль Color позволяет менять администратору цветовую схему. Вы сможете изменить цвета выбранной схемы. Модуль может менять стили, и перерисовывать изображения. Однако, тема должна предоставить конкретные хуки, а дизайн разрабатываться с учетом использования этого модуля. Ниже объясняется базис создания темы с изменяемым цветом.

Дизайн

color.module.png Важно понять как работает модуль color, не каждый дизайн может быть разукрашен. Мы берем прозрачное изображение дизайна (основу), которое включает все, кроме бэкграунда. Затем ставим его поверх цветного бэкграунда, что бы получить разукрашенную версию. Наконец разрезаем цельное изображение на мелкие кусочки, и сохраняем в разные файлы. Так же нужно изменить все цвета определенные в стилях. Модуль может плавно менять цвета, используя палитру. Цвета которых не в палитре, могут быть заменены на максимально подходящие (вне зависимости от того, чей цвет меняется: ссылка, текст, цвет бэкграунда). Итак, макет фотошоп должен содержать файл со слоями, включающий один или несколько цветных слоев снизу, и со всем остальным наверху. Когда вы сохраняете основное изображение, нужно объединить все слои, при этом сделав цветные слои невидимыми. Посмотрите на base.png темы Garland. Так же есть видео показывающее как создать свой base.png используя фотошоп. Все созданные файлы записываются в /files/css и используются вместо стандартных изображений. Это означает, что раскрашиваемая тема может работать «из коробки» без модуля color, в цветовой схеме по умолчанию.

Практика

Будем использовать тему Garland как пример. Наиболее важные файлы находятся в папке themes/garland/color: base.png Включает в себя основной дизайн темы. color.inc Файл включает в себя основные параметры для раскрашивания темы. preview.css Стиль используемый для генерации превью изменений цвета. preview.png Изображение используется для генерации превью изменений цвета. Наличие color/color.inc делает доступным выбор цветов в настройках темы. Это обычный PHP-файл, который включает в себя массив $info со следующими значениями: Схемы array( '#0072b9,#027ac6,#2385c2,#5ab5ee,#494949' => t('Blue Lagoon (Default)'), '#464849,#2f416f,#2a2b2d,#5d6779,#494949' => t('Ash'), '#55c0e2,#000000,#085360,#007e94,#696969' => t('Aquamarine'), '#d5b048,#6c420e,#331900,#971702,#494949' => t('Belgian Chocolate'), '#3f3f3f,#336699,#6598cb,#6598cb,#000000' => t('Bluemarine'), '#d0cb9a,#917803,#efde01,#e6fb2d,#494949' => t('Citrus Blast'), '#0f005c,#434f8c,#4d91ff,#1a1575,#000000' => t('Cold Day'), '#c9c497,#0c7a00,#03961e,#7be000,#494949' => t('Greenbeam'), '#ffe23d,#a9290a,#fc6d1d,#a30f42,#494949' => t('Mediterrano'), '#788597,#3f728d,#a9adbc,#d4d4d4,#707070' => t('Mercury'), '#5b5fa9,#5b5faa,#0a2352,#9fa8d5,#494949' => t('Nocturnal'), '#7db323,#6a9915,#b5d52a,#7db323,#191a19' => t('Olivia'), '#12020b,#1b1a13,#f391c6,#f41063,#898080' => t('Pink Plastic'), '#b7a0ba,#c70000,#a1443a,#f21107,#515d52' => t('Shiny Tomato'), '#18583d,#1b5f42,#34775a,#52bf90,#2d2d2d' => t('Teal Top'), )); ?> Этот массив содержит заранее заданные цветовые схемы Каждая запись состоит из 5 цветов (основной цвет, цвет ссылок, верх шапки, низ шапки, и цвет текста) отформатированных как показано выше, а так же названия. Первая схема используется как эталон, и должна максимально соответствовать цветам использованным в теме по умолчанию, рисункам, и стилям. Иначе, в финале можно получить не те цвета, которые хотел пользователь. Больше информации о том как рассчитываются цвета, можно найти в секции «Стили».

Копируемые изображения

array( 'images/menu-collapsed.gif', 'images/menu-expanded.gif', 'images/menu-leaf.gif', )); ?> Массив включает в себя список изображений, которые не должны быть заменены. Они будут скопированы туда где сгенерированные изображения и стиль.

Заполнение областей и градиентов.

Для раскрашивания изображения, мы создаем изображение такого же размера, и рисуем цветные области и градиент. Для гибкости, расположение этих областей задается координатами (x, y, ширина, высота): array(0, 37, 760, 121)); ?> Вы можете задать вертикальный двух-цветный градиент. array( 'base' => array(0, 0, 760, 568), 'link' => array(107, 533, 41, 23), )); ?> Можно задать регион для каждого из цветов палитры. Регионы будут залиты выбранным цветом. Доступные цвета 'base', 'link', 'top', 'bottom' и 'text'.

Нарезка изображения

Далее вам нужно задать области базового изображения, для нарезки. Еще раз, вы указываете координаты (x, y, ширина, высота), вместе с названием изображения, использованным в стиле. Логотип и скриншот всегда названы одинаково. Скриншот будет урезан до 150х90 пикселей. array( 'images/body.png' => array(0, 37, 1, 280), 'images/bg-bar.png' => array(202, 530, 76, 14), 'images/bg-bar-white.png' => array(202, 506, 76, 14), 'images/bg-tab.png' => array(107, 533, 41, 23), 'images/bg-navigation.png' => array(0, 0, 7, 37), 'images/bg-content-left.png' => array(40, 117, 50, 352), 'images/bg-content-right.png' => array(510, 117, 50, 352), 'images/bg-content.png' => array(299, 117, 7, 200), 'images/bg-navigation-item.png' => array(32, 37, 17, 12), 'images/bg-navigation-item-hover.png' => array(54, 37, 17, 12), 'images/gradient-inner.png' => array(646, 307, 112, 42), 'logo.png' => array(622, 51, 64, 73), 'screenshot.png' => array(0, 37, 400, 240), )); ?>

Файлы

В конце вам нужно указать расположение файлов вашей темы. Вам нужно изображение+ стиль для превью, и базовое изображение: 'color/preview.png', 'preview_css' => 'color/preview.css', 'base_image' => 'color/base.png', ); ?> С 6 версии, модуль Color больше не требует наличия base_image, то есть, можно использовать модуль без изображений.

Стили

Модуль color считает файл style.css так же, как и любой другой импортированный с помощью @import, и создаст новый файл style.css. Он изменит цвета в CSS используя одну из выбранных цветовых палитр как эталонных, .в зависимости от контекста. Однако, если цвет в стиле совпадает с одним из эталонных цветов, он будет проигнорирован. color-shift.png Например, предположим что синий цвет — эталонный по умолчанию, но вы изменили его на красный. Ваш стиль включает голубой и фиолетовый цвета, оба относятся к цвету по умолчанию. Результирующие цвета (лиловый и коричневый) отличны от красного, поскольку оригинальные цвета произошли от синего. С технической точки зрения: сохраняются относительные отличия в оттенке, насыщенности, и яркости. Если модуль color использует неправильный эталонный цвет, постарайтесь раскидать разные части в разные CSS, каждый в свою секцию { ... }, что бы относительно контекста не возникало путаницы. Если вы правили стиль темы после изменения цветовой схемы, нужно обновить цветовую схему для восстановления смешанных версий. Если хотите что бы определенные цвета в стиле не были изменены, их нужно поставить после этого маркера: /******************************************************************* * Color Module: Don't touch * *******************************************************************/ Вы можете использовать этот маркер в файле style.css только 1 раз. Он действует глобально, то есть, если вы используете его внутри импортированного стиля, все цвета после @import так же останутся нетронутыми.

Делаем что бы цвета совпадали

Очень важно, что бы сгенерированные рисунки совпадали с сдвинутыми цветами в сгенерированном стиле. Иначе могут показаться уродливые края. Что бы это работало, в тех местах где пиксели базового изображения пересекаются с цветами заданными в CSS, они должны быть простого цвета. Поскольку мы не знаем где в базовом изображении появятся цвета заданные в CSS, мы используем глобальный цвет для смешивания, который должен быть одинаков по всему дизайну. В Garland использован белый цвет. Заметьте что базовое изображение Garland, включает серые и черные пиксели, где в бэкграунде использованы только изображения (например заголовок). Другие цвета тоже отлично подходят. '#ffffff'); ?> Мазохисты могут заглянуть внутрь модуля color, особенно интересна функция _color_shift() (прим. переводчика — Судя по всему автор-старый мазохист), если хотите узнать что и почему происходит. Изменения в PHPTemplate И наконец, вам нужно вставить хук модуля color в вашу тему. В виде примера мы используем движок PHPTemplate, но это должно подойти и к другим движкам. В файле template.php вашей темы добавьте этот снипет(Для Drupal 6.x): В Drupal 5 вам понадобится этот снипет: Это позволит модулю заменить логотип, стиль, и скриншот вашей темы. Ели вы внесете в _phptemplate_variables другие изменения, это так же нужно отразить это в снипете.

Очищаем кеш темы

Файл .info кешируется, поэтому Drupal не заметит его изменения. Для очистки кеша, можно сделать следующее:

  1. Кликните по "clear all cached data" на странице "Administer > Site configuration > Performance".
  2. Если включен блок Devel (идет с модулем Devel), нажмите "Empty cache".
  3. Зайдите на страницу "Administer > Site building > Themes".

ЗЫ. Вторая часть перевода статьи с друпал орг. Если найдете ошибки, пишите в комментах, статья длинная, мог что то пропустить. В следующей части будет рассказано о работе с CSS при создании темы. Поэтому =====V

Комментарии

а файлов типа scripts[] = myscript.js может быть сколько угодно, или только один, и в него нужно включить все скрипты?

Спасибо, как-то все время забывала уточнить этот момент)

PS С моими способностями, капча обычно вводится с энного раза)

Можно зарегестрироваться)
Капчу вроде специально подберал попроще -)

Спасибо за уроки, очень полезно.

Такой вопросы: "Если я добавляю свой регион, какая переменная будет за него отвечать?? Где она инициализируется??? Почему созданный регион выводится автоматически сразу после header-region, хотя нигде этого не прописано??? И еще, если переменные отвечающие за регионы создаются автоматически, используя данные .info файла, то почему не получается использовать собственную, к примеру, $myregion, хотя в инфо регион прописан и даже выводится, но не там где я хочу"

Спасибо.

regions[myvar] = Left sidebar

переменная будет $myvar
Почитайте 9 урок, там это разобранно.
Регионы выводятся только если вы этого хотите

<?php if ($left) { ?>
<?php print $left ?>
<?php } ?>

вот вывод региона лефт, в теме гарланд