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

«Секционные» опции в MaxSite CMS

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

Часто стоит задача сделать опции для сложных повторяющихся элементов сайта. Классический вариант - слайдер. Слайдер состоит из отдельных слайдов, каждый из которых имеет свой набор опций: адрес изображения, текст, ссылку и т.п.

Причём, как правило, опции слайдера могут меняться от задачи и используемого слайдера (их очень много).

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

[slide]
link = ссылка изображения
title = подсказка
img = адрес картинки
[/slide]
 
[slide]
link = ссылка изображения
title = подсказка
img = адрес картинки
[/slide]

В этом примере в тексте опции каждая секция-слайдер задана с помощью блоков slide. Именование, количество параметров - произвольно.

Общая схема такая.

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

Задание опции слайдера

В файле custom/my_options.ini создаем textarea-опцию.

[Слайдер]
options_type = templates
options_key = slides
type = textarea
rows = 20
default = ""
section = "Слайдер"
section_description = "Настройка слайдера"
description = ""

В настройке шаблона указываем секции. Пример есть выше.

Получение опции и преобразование в массив

// получили опцию
$slides0 = mso_get_option('slides', 'templates', array());
 
// получаем массив секций
$slides = mso_section_to_array($slides0, 'slide', array('link'=>'', 'title'=>'', 'img'=>''), true);

// в $slides готовый массив

Рассмотрим функцию mso_section_to_array(). Первым параметром должен быть текст опции с секциями.

Второй параметр задаёт паттерн регулярного выражения по которому будет происходить поиск каждой секции (по сути - это просто название [секции]).

Третий параметр - дефолтные значения параметров каждой секции. Если по какой-то причине, параметра нет в тексте секции, будет подставлено дефолтное значение.

Четвертый параметр - позволяет автоматически создать регулярное выражение, основываясь на указанном паттерне. Если указать false (или не указывать вовсе), то регулярное выражение нужно задавать явно во втором параметре.

Обходим массив

Лучше всего это делать с помощью цикла foreach.

foreach ($slides as $slide) 
{
	pr($slide['link');
	pr($slide['title');
	pr($slide['img');
}

Данный код выведет значение каждого параметра каждой секции.

Как использовать

Тут уже всё зависит от html-кода слайдера. Пусть слайдер должен задаваться так:

<div class="slides">
 
	<div class="slide">
		<a href="ССЫЛКА1"><img src="АДРЕС1" alt=""></a>	
		<h3>ТИТУЛ1</h3>
	</div>
 
	<div class="slide">
		<a href="ССЫЛКА2"><img src="АДРЕС2" alt=""></a>	
		<h3>ТИТУЛ2</h3>
	</div>
 
	<div class="slide">
		<a href="ССЫЛКА3"><img src="АДРЕС3" alt=""></a>	
		<h3>ТИТУЛ3</h3>
	</div>
 
</div>

То есть это общий div.slides, где каждый слайд задаётся через div.slide с разными элементами.

<div class="slides">
 
	<?php foreach ($slides as $slide) { ?>
		<div class="slide">
		<?= '<a href="' . $slide['link'] . '"><img src="' . $slide['img'] . '" alt=""></a>' ?>	
		<h3><?= $slide['title'] ?></h3>
		</div>
	<?php } ?>
 
</div>

Цикл сделан через стандартный foreach, где каждый слайд получается как массив $slide.

Итого

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

Функция mso_section_to_array() находится в default-шаблоне в файле functions-template.php, который подключается автоматом, при условии, что у вас шаблон построенный по default-схеме. Если нет, то функцию можно вручную добавить в свой шаблон.

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

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

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

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