Модуль Color позволяет управляющему сайтом изменять цветовую схему темы не занимаясь ручной правкой кода. Смена цветовой схемы осуществляется на странице настройки темы из 5-цветной палитры. Для того, чтобы такая возможность была доступна на странице настройки темы, тема должна содержать определённые хуки, которые позволяют это сделать. Этот документ объясняет основы работы с темами, в которых будет возможна смена цветовой схемы.
Важно понимать, что в результате работы модуля Color, не для любой темы будет доступна возможность смены её цветов. Мы возьмём прозрачное изображение дизайна (основу), затем мы наложим это изображение поверх фона, чтобы получить цветную версию. И наконец, мы разрежем скомпонованное изображение на части, и сохраним их в качестве отдельных файлов.
Мы также обработаем стили и изменим все цвета основывающиеся на изменяемых. Модуль плавно изменяет цвета используя палитру в качестве основы своих действий. Цвета, которые не определены явно в палитре, согласованы с ближайшими цветами, которые определены явно (будь это ссылка, текст или фон).
Таким образом, наш макет будет содержать несколько слоёв, цвета которых смешиваясь будут давать итоговую картину. При сохранении итогового изображения и объединении слоёв, будет сохранена их прозрачность. В качестве примера можно посмотреть на файл base.png темы Garland (чтобы увидеть прозрачность, откройте его в графическом редакторе).
Файлы стилей, которые генерируются при смене цветовой схемы, записываются в папку [системная-папка]/css. Это означает, что тема сохранит изменённые цвета и в случае отключения модуля Color. Файл стилей в папке самой темы не изменяется.
Давайте возьмём в качестве примера стандартную тему Garland. Файлы работающие с модулем Color можно найти в папке themes/garland/color. В этой папке находятся 4 файла:
Наличие файла color.inc делает доступной пипетку для выбора цвета на странице настройки темы. Это обычный PHP-файл, который содержит массив $info со следующими значениями:
Первая схема используется в качестве ссылки на схему, которая используется по умолчанию, поэтому она должна содержать записи о цветах, которые соответствуют используемым по умолчанию.
<?php
array('schemes' => 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'),
));
?>
<?php
array('copy' => array(
'images/menu-collapsed.gif',
'images/menu-expanded.gif',
'images/menu-leaf.gif',
));
?>
<?php
array('gradient' => array(0, 37, 760, 121));
?>
Можно определить вертикальный градиент с двумя цветами.
<?php
array('fill' => array(
'base' => array(0, 0, 760, 568),
'link' => array(107, 533, 41, 23),
));
?>
Кроме того, можно определить цвет для каждой области и указанная область будет залита выбранным цветом. Доступные области: base, link, top, bottom и text.
<?php
array('slices' => 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),
));
?>
<?php
array(
'preview_image' => 'color/preview.png',
'preview_css' => 'color/preview.css',
'base_image' => 'color/base.png',
);
?>
Модуль Color считывает содержание файла style.css, а также других файлов, которые импортируются из этого файла при помощи правила @import. После этого, создаётся новый файл style.css, который содержит изменённые нужным образом цвета, для чего используется одна из цветовых схем. Это зависит от контекста:
a
elementscolor:
stylesHowever, if a color in the stylesheet matches one of the reference colors exactly, the context will be ignored, and the matching replacement color will be used instead.
For example, suppose your reference color is dark blue by default, but you change it to red. Your default stylesheet contains both light blue and gray purple, both relative to this reference color.
The resulting colors (mauve and brown) are similarly different from red as the original colors were from blue. In technical terms: the relative difference in hue, saturation and luminance is preserved.
If you find color.module is using the wrong reference color, try separating the different pieces into separate CSS rules, each in their own selector { ... } section, so there is no confusion about the context.
Если редактируете стили после того, как была сохранена цветовая схема сайта, то вам нужно пересохранить цветовую схему, чтобы в сгенерированный модулем Color файл style.css были внесены сделанные вами изменения в файле style.css, который расположен в папке темы.
Если вы хотите, чтобы определённые цвета в файле стилей не заменялись, то в файл style.css нужно добавить следующий маркер:
/*******************************************************************
* Color Module: Don't touch *
*******************************************************************/
Этот маркер можно использовать только один раз. Маркер применяется глобально, таким образом если есть стили которые импортируются из других файлов, их цвета также не будут тронуты.
Важно, чтобы сгенерированные изображения совпадали с новыми цветами определёнными стилем. В противном случае, вы получите резкие некрасивые углы в местах смены цветов.
Чтобы это сделать, пиксели основного изображения должны использовать один цвет в тех областях, где они будут совпадать с цветами определёнными в CSS-файле. Так как мы не знаем, где определённые стилем цвета будут показываться в базовом изображении, мы используем глобальный смешивающий цвет, который быть таким же во всё дизайне. Тема Garland использует белый. Отметьте, что базовое изображение темы Garland не включает серые и чёрные пиксели, кроме областей где используются в качестве фона изображения (например в заголовке сайта). Кроме белого, хорошими претендентами могут быть чёрный или серый цвета.
<?php
array('blend_target' => '#ffffff');
?>
Мазохисты могут посмотреть внутренности файла color.module, в особенности функцию _color_shift(), если вы интересуетесь как применяются изменения PHPTemplate.
И наконец, нужно добавить хук модуля Color в темы. Для этого, можно использовать следующий сниппет:
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
return $vars;
}
return array();
}
?>
Эти сниппеты позволят модулю переопределять логотип, стили и скриншот темы. Если вы используете и другие сниппеты для _phptemplate_variables, то разумеется их будет нужно объединить с этим сниппетом.
В видеозаписи можно посмотреть, как сделать аналогичный файл в Adobe Photoshop.