Иногда нужно сделать несколько шаблонов с небольшой разницей. Скажем разные css-стили, изображения и прочие мелочи. Всё остальное: html-структура, настройки, функционал - идентичен.
Часто такие заказы встречаются, когда нужно создать сетку сайтов.
Чтобы не делать для каждого сайта отдельный шаблон, можно создать соответствующую опцию в шаблоне, которая будет переключать «изменяемые» части. Сейчас покажу, как это можно сделать.
Сама опция задаётся, как это принято в MaxSite CMS в файле custom/my_options.ini. Лучше указать её тип select (выпадающий список). Например так:
[Укажите сайт] options_type = templates options_key = my_select_site type = select description = "" values = "site1 # site2 # site2" default = "site1"
Мы сразу предопределяем значения опции site1 (2,3), которые будут являться идентификаторами «изменяемой части шаблона».
Разные стили
Для css-стилей я настоятельно рекомендую использовать возможности LESS, тем более, что его компилятор уже присутствует в MaxSite CMS.
Стили мы получим в var_style.css, который будет автоматом скомпилирован через var_style.php.
Находим default/css/less/compiling-less.zip и распаковываем var_style.php, в свой css-каталог.
В var_style.php прописан компилятор LESS, который принимает var_style.less. Поскольку у нас для каждого сайта будет свой less-файл, то немного изменим код компилятора, чтобы исходный less-файл зависел от опции «my_select_site».
Пусть это будут site1.less, site2.less, site3.less, то есть «опция.less».
$var_style = mso_get_option('my_select_site', 'templates', 'site1') . '.less'; echo mso_lessc( // входной less-файл (полный путь на сервере) getinfo('template_dir') . 'css/' . $var_style, ...
В var_style.php в функцию mso_lessc(), передаем less-файл (переменная $var_style).
Теперь var_style.css будет формироваться, в зависимости от выбранного сайта.
Изображения
Если в шаблоне предполагается использовать разные изображения для разных сайтов, то можно сделать подкаталоги в images для каждого варианта. Поскольку пути прописываются в css, то никакой путаницы не возникнет.
Определение в php-файлах
Если нужно поменять вывод в php-файле, например в компонентах или custom-файлах, то получаем опцию и от этого уже выставляем нужные условия.
$this_site = mso_get_option('my_select_site', 'templates', 'site1'); if ($this_site == 'site1') { ... код для site1 }
Свой class для BODY
В файле custom/my_functions.php можно задать css-класс для тэга BODY.
$this_site = mso_get_option('my_select_site', 'templates', 'site1'); mso_set_val('body_class', $this_site);
Теперь для выбранного сайта можно задать стили через body.site1.
Отличие этого вараинта от css-профилей
CSS-профиль подключается после всех основных стилей и перекрывает существующие. В этом же варианте стили формируются строго под выбранный сайт и нет необходимости после их модифицировать.
Если же между сайтами есть какие-то общие стили, то можно выделить их в отдельный less-файл и подключать с помощью @import.
Комментариев: 2 RSS
1Саша16-05-2012 19:02
Жостко трохи, в Joomla наприклад це реалізовано простіше, просто потрібно прописати іні-файл та відповідно зверстати, і більше нікуди не потрібно лізти, тільки бери і вибирай відповідній сторінці відповідний стиль. Подивіться ,може і собі так зробите, то простіше працювати буде з такими сайтами, які описані вище:)
2Владимир21-05-2012 13:06
Ваша Joomla - какашка :) Спасибо за статью!