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

Использование произвольных опций и настроек в своем шаблоне

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

В предыдущих статьях (раз, два) мы могли оценить насколько несложно адаптировать html-шаблон к MaxSite CMS. Главное, что необходимо сделать верстальщику - это разделить исходный html-шаблон на две части: main-start.php и main-end.php. Цикл вывода данных система берёт уже на себя.

Таким образом типичный шаблон MaxSite CMS будет состоять из:

  • index.php - диспетчер файлов (копируем из default-шаблона)
  • info.php - краткое описание шаблона
  • main-start.php - начальная часть шаблона
  • main-end.php - конечная часть шаблона
  • header.php - часть HEAD (по желанию)
  • footer.php - подвал (по желанию)
  • functions.php - регистрируем сайдбар
  • options.php - если шаблон использует опции (копируем из шаблона Clouds)

Непосредственно за верстку отвечают только два файла main-start.php и main-end.php - остальные практически без изменений можно копировать от шаблона к шаблону. Со временем у вас будут возникать какие-то свои заготовки, который снизят трудозатраты.

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

Опции для шаблона задаются в специальном файле options.ini. Этот файл имеет простой текстовый формат, в котором несложно разобраться. Например мы хотим задать опцию, текст из которой будет выводиться в шапке. Создаём options.ini и пишем:

[Текст в шапке]
options_type = templates
options_key = text_for_header
type = textfield
description = "Текст, который будет отображен в шапке сайта"
default = ""

Здесь:

  • options_type - тип/группа опции
  • options_key - ключ опции
  • type - тип поля (в нашем случае одиночный текстовый input)
  • description - описание/подсказка
  • default - значение по-умолчанию

Сохраняем файл, входим в админку в настройки шаблона и видим созданную опцию. Можно указать произвольный текст и убедиться, что всё прекрасно сохраняется. Теперь нам нужно вывести опцию в шаблоне.

Пусть наша опция выводится в файле main-start.php в блоке #header. Для вывода опций MaxSite CMS предоставляет функцию mso_get_option().

mso_get_option('ключ', 'тип/группа', 'значение, если опции нет')

Меняем main-start.php:

... 
	<div id="header">
			<h1>Сайт</h1>
			<h2>Описание</h2>
			<h3><?= mso_get_option('text_for_header', 'templates', '') ?></h3>
	</div><!-- div id="header" -->
...

Обновляем сайт и видим введенный в админ-панели текст.

Если стоит задача вывести какой-то текст побольше, то однострочного поля будет недостаточно. Вместо него можно использовать textarea. Меняем в options.ini значение «type» на textarea.

Обратите внимание, что поле type используется только для того, чтобы указать каким именно способом вводить данные в админ-панели.

MaxSite CMS поддерживает следующие варианты:

  • textfield - однострочное текстовое
  • textarea - многострочное
  • select - выпадающий список вариантов
  • checkbox - отметка
  • radio - выбор из нескольких вариантов

Поскольку поля разные, то они имеют некие специфические параметры. Мы рассмотрим каждый вариант.

Предположим, стоит задача вынести в админ-панель управление неким блоком. Например заказчик предполагает, что у него будет возможность размещать рекламу. И эту рекламу нужно будет периодически отключать. Верстальщик может заранее задать такой блок в шаблоне и выводить его в зависимости от установленной опции. В этой задаче можно задать две опции: первая будет включать/выключать отображение блока, а вторая содержать произвольный код рекламы.

В options.ini задаём:

[Рекламный блок]
options_type = templates
options_key = adv_blok
type = checkbox
description = "Отметьте, если нужно вывести рекламный блок на сайте"
default = "0"
 
[Текст рекламного блока]
options_type = templates
options_key = adv_blok_text
type = textarea
description = "Текст, который будет отображен в рекламном блоке (можно использовать HTML)"
default = ""

Из особенностей стоит отметить только то, что для поля checkbox возможные значения только 1 (отмечено) и 0 (не отмечено).

Теперь разберём код вывода опции. Например мы добавим его вывод в конец main-start.php сразу после div.content-all. В начале нам нужно будет получить опцию «Рекламный блок» и если она отмечена, то получить «Текст рекламного блока», который и вывести на сайте.

...
<div class="content-all">
	<?php 
		if (mso_get_option('adv_blok', 'templates', 0))
			echo '<div class="adv_blok">' 
				. mso_get_option('adv_blok_text', 'templates', '') 
				. '</div>';
	?>

Вначале мы проверяем условие if, после этого выводим текст, обрамляя его в div.adv_blok.

Зайдите в админ-панель и снимите отметку с «Рекламный блок» и текст сразу же исчезнет со страницы.

Иногда стоят задачи выводить на сайте «что-то» предопределённое. Например в default-шаблоне это несколько вариантов изображений для шапки. Варинты выбора реализуются с помощью полей select и radio.

Пусть заказчик поставил задачу предусмотреть не просто вывод отключаемого рекламного блока, но еще и предусмотреть несколько базовых цветовых решений: красный, зеленый, синий и желтый. Очевидно, что оптимальным для нас решением будет использование разных css-классов для каждого случая. Поскольку варианты предопределены, то мы заранее прописываем стили, а в значении опции получаем имя нужного класса, например для красного блока - div.adv_blok_red.

Вначале добавим опцию в options.ini:

[Цвет рекламного блока]
options_type = templates
options_key = adv_blok_color
type = select
description = "Выберите цветовое оформление рекламного блока"
values = "red||Красный # green||Зеленый # blue||Синий # yellow||Желтый"
default = "red"

Тут у нас появилось специфичное для select поле values. В этом поле задаётся список вариантов. Элементы списка задаются через разделитель #. Каждый элемент, в свою очередь может состоять из двух частей, разделённых || - значение||название. Выбранное «значение» и будет использоваться как значение опции, а «название» используется для вывода читабельного описания. Если, по каким-то причинам не нужно использовать «название» (можно выборочно), то используется только разделитель #.

Опцию задали, смотрим настройки шаблона, убеждаемся, что список отображается как положено. Теперь определимся, как будем получать нужное значение и выводить его. Наш код изменится совсем немного: после проверки нужно ли отображать рекламный блок, мы получаем значание adv_blok_color в отдельную переменную и выводим текст блока, где подставляем класс для элемента div.

...
<div class="content-all">
<?php 
	if (mso_get_option('adv_blok', 'templates', 0))
	{
		$class = mso_get_option('adv_blok_color', 'templates', 'red');
 
		echo '<div class="adv_blok_' . $class . '">' 
			. mso_get_option('adv_blok_text', 'templates', '') 
			. '</div>';
	}
?>

То есть мы просто добавили одну строчку и дописали $class. Обновим сайт и убедимся, что css-классы создаются как мы и задумывали.

Если же мы решим использовать тип поля radio, то немного изменится его формат в ini-файле.

[Цвет рекламного блока]
options_type = templates
options_key = adv_blok_color
type = radio
description = "Выберите цветовое оформление рекламного блока"
values = "red  # green # blue # yellow"
delimer = "<br>"
default = "red"

В вариантах выбора для radio нельзя использовать «название», только «значение». Но можно указать delimer - разделитель элементов списка. В зависимости от задачи и длины текстов, это позволяет выстраивать элементы в более читабельном виде.


Подведём итоги.

В MaxSite CMS опции можно смело использовать в своём шаблоне. В отличие от WordPress, где создание страницы настроек шаблона сложное и громоздкое дело, в MaxSite CMS всю работу по обслуживанию опций, создание страницы настроек и т.п. берёт на себя. Для использования опции, вебмастер вначале задаёт её в options.ini, после этого в нужном месте шаблона получает значение с помощью функции mso_get_option().

Подключением ini-файла опций занимается options.php. Если вы скопируете его из default-шаблона, то это позволит выводить опции только из файла options.ini вашего шаблона. На практике бывает удобней объединить default-опции со своими. Под такую задачу настроен файл options.php из шаблона Clouds - он вначале подключит default-опции, потом тот, который в вашем шаблоне.

Если же стоит задача убрать из отображения неиспользуемые опции (прописанные в default-шаблоне), то в своём options.ini, нужно задать пустые секции, например:

[Картинка в шапке]
[Файл картинки в шапке]
[Стиль меню в шапке]
[Стиль названия сайта в шапке]
[Стиль описания сайта в шапке]  

Это полностью исключит вывод этих полей в настройке шаблона.

Если по какой-то причине, вы забыли о формате ini-файла, то обратите внимание на файл application/maxsite/common/ini - readme.txt - это небольшая подсказка.

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

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

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

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