В предыдущих статьях (раз, два) мы могли оценить насколько несложно адаптировать 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 - это небольшая подсказка.