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

Свои опции и настройки в MaxSite CMS

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

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

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

В MaxSite CMS управлениями опциями делается двумя путями.

Первый - задание опций в админ-панели. Второй - программный путь, когда работа с опциями (создание, удаление, редактирование) реализуется программистом непосредственно в php-коде.

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

Для задания опций через админ-панель, используется вспомогательный файл options.ini, который следует расположить в каталоге свого шаблона. Этот файл имеет синтаксис обычного ini-файла, в котором очень просто разобраться.

[Название/заголовок опции]
options_type = тип/группа опции
options_key = ключ опции
type = тип поля (textfield, select, checkbox, radio, textarea)
description = "Описание"
default = "Значение по-умолчанию"

Для того, чтобы создать опцию всё что нужно сделать, так это добавить в options.ini соответствующую секцию. Рассмотрим практический пример.

Предположим в нашем шаблоне мы хотим вывести в произвольном месте какой-то текст. Для этого в шаблонном options.ini добавим что-то вроде такого:

[Текст в шаблоне]
options_type = templates
options_key = my_text
type = textfield
description = "Введите текст"
default = ""

Сохраняем файл и в админке в Настройке шаблона видим нашу опцию.

Обратите внимание, что опции, которые еще не добавлены в базу данных, MaxSite CMS отмечает красным цветом. Если навести курсор на заголовок опции, то появится всплывающая подсказка - значение «options_key».

Теперь мы можем менять опцию произвольным образом. Заметьте: пока мы не написали ни единой строчки код - только задали опцию в ini-файле.

Теперь нам нужно вывести значение опции в шаблоне. Для этого используется функция mso_get_option().

echo mso_get_option('my_text', 'templates', '');

Сама функция mso_get_option() задана следующим образом:

mso_get_option($key, $type = 'general', $return_value = false)
  • $key - ключ опции
  • $type - тип/группа опции
  • $return_value - возвращаемое значение, если опции нет

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

Рассмотрим еще один практический пример. Например вы наверное в курсе, что в новом WordPress 3.0 появилась возможность указывать произвольный файл для шапки сайта. Когда я посмотрел на код, реализующий эту возможность, то пришёл в тихий ужас... Всё, что нужно было сделать разработчикам, так это добавить отдельную опцию, где админ будет указывать адрес картинки...

Попробуем сделать нечто похожее.

В options.ini создаем секцию

[Файл картинки в шапке]
options_type = templates
options_key = image_header
type = textfield
description = "Укажите адрес картинки, которую следует поместить в шапку."
default = ""

В шаблонном main-start.php (здесь выводится шапка) пишем:

<?php 
 
if ( $h2 = mso_get_option('image_header', 'templates', '') )
	$h2 = 'style="background: url(' . $h2 . ') no-repeat;"';
?>
 
<div id="header2" <?= $h2 ?> >
... 
</div><!-- div id="header2" -->

Вначале мы получаем значение опции и заносим её в переменную $h2. Если эта переменная не пустая, то меняем её так, чтобы сформировался css-стиль background с указанным адресом. После этого выводим этот стиль в div id="header2". Как видите всё элементарно. :)

Замечу, что данный пример (с небольшими упрощениями) я взял из дефолтного шаблона MaxSite CMS, которому более двух лет.

Давайте теперь немного усложним задачу: пусть опция будет не текстовым полем (textfield), а выпадающим списком - select. Для этого типа поля следует указывать значения для выбора. То есть фактически нам нужно создать такую секцию:

[Файл картинки в шапке]
options_type = templates
options_key = image_header
type = select
values =  "h2.jpg # h2-sev.jpg # h2-01.jpg # h2-02.jpg # h2-03.jpg"
description = "Выберите картинку, которую следует поместить в шапку."
default = "h2.jpg"

Заметьте, что мы добавили values, где через символ # указываем варианты выбора.

Именно так и реализована смена изображения шапки в дефолтном шаблоне. То есть, если нужно добавить новый файл, следует изменить options.ini.

Для нас же было бы интересней сделать так, чтобы значения для выбора создавались автоматически на основе уже загруженных файлов в /uploads/. Получается такая схема:

  • Загружаем изображение через админ-панель на сервер. Сразу же выполняем обрезку, выставляем размеры - в общем стандартные процедуры.
  • После этого переключаемся на настройки шаблона, где в выпадающем списке уже будут присутствовать наши файлы. Осталось только выбрать.

Для таких случаев в MaxSite CMS можно указывать php-функцию прямо в ini-файле. Система автоматически её выполнит и подставит строковый результат в поля values, default или description секции.

Делается это с помощью конструкции PHP_START функция PHP_END:

[Файл картинки в шапке]
options_type = templates
options_key = image_header
type = select
values = PHP_START my_image_header PHP_END
description = "Выберите картинку, которую следует поместить в шапку."
default = ""

В данном случае в поле values будет подставлен результат my_image_header().

Имя функции задаётся произвольно.

Функция my_image_header() в нашем случае должна возвращать список файлов (в виде строки), загруженных в каталог uploads. Саму же функцию следует описать в шаблонном functions.php - этот файл автоматически подключается при инициализации системы и будет доступен в админ-панели. (Настройки-же мы выполняем именно в админ-панели!)

function my_image_header()
{
	// подключение CodeIgniter
	$CI = & get_instance();
	
	// хелпер для работы с каталогами
	$CI->load->helper('directory'); 
	
	// пусть файлы для шапки хранятся в сайт/uploads/headers
	$path = getinfo('uploads_dir') . 'headers/';
	$path_url = getinfo('uploads_url') . 'headers/';
	
	// если нет такого каталога пусть будет просто сайт/uploads
	if ( !is_dir($path) ) 
	{
		$path = getinfo('uploads_dir');
		$path_url = getinfo('uploads_url');
	}
	
	// получаем все файлы в каталоге
	$files = directory_map($path, true);
	
	// если файлов нет, то возвращаем пустую строчку
	if (!$files) return '';
	
	// результирующий массив с нашими файлами
	$all_files = array();
	
	// функция directory_map возвращает не только файлы, но и подкаталоги
	// нам нужно оставить только файлы. Делаем это в цикле
	foreach ($files as $file)
	{
		if (is_dir($path . $file)) continue; // это каталог - уходим
		
		// добавим файл в массив сразу с полным адресом
		$all_files[] = $path_url . $file;
	}
	
	// отсортируем список для красоты
	sort($all_files);
	
	// преобразуем массив в строчку с разделителем #
	return implode($all_files, '#');
}

Функция getinfo() возвращает различные значения. В нашем случае мы получаем

  • uploads_dir - полный путь на сервере до каталога uploads.
  • uploads_url - внешний адрес (с http) к uploads на сайте.

Функция directory_map() является т.н. хелпером CodeIgniter. Для этого в начале мы и получаем доступ к функциям CodeIgniter (get_instance). Весь остальной код не должен у вас вызвать проблем.

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

Данный пример сам по себе довольно сложен, поскольку использует дополнительную функцию. В большинстве же своём задачи вебмастера более простые: задать произвольный текст, выбрать цвет, указать стиль и т.п. Для каких-то предопределенных случаев удобно использовать выпадающий список (select), для больших текстов - textarea. Всё это уже реализовано в MaxSite CMS и можно смело пользоваться. :)

Комментариев: 5 RSS

1Евгений03-08-2010 22:01

Не подскажите почему может перестать работать модуль статистики посещений?

Просто в какой-то момент при переходе на страницу статистики переход происходит на пустую страницу.

2Аноним04-08-2010 08:21

О каком «модуле статистики» идет речь?

3Дмитрий29-10-2013 14:17

Привет MAX, есть вопрос: Я сделал вывод опции, но он эту опцию отображает в шаблон прочие, как бы сделать так что бы опция отображалась отдельно. Если точнее то как например главная она уже включает в себя разные опции. Подскажи пожалуйста?

4Аноним29-10-2013 17:30

Нужно задать секцию в ini-файле.

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

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

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

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