Современная, быстрая и удобная система управления сайтом

Единый шаблон под разные сайты

Архив записейКомментарии: 2Просмотров: 3853

Иногда нужно сделать несколько шаблонов с небольшой разницей. Скажем разные 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 - какашка :) Спасибо за статью!

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)