Блог/Множественные переменные

Множественные переменные в Modx Evolution

Автор: Кудашев Сергей

Как известно, в ModX есть прекрасный механизм позволяющий прикрепить практически любые собственный данные к документу, с последующим выводом этих данных. Данный механизм называется Template Variables (Переменные Шаблона). Однако у данного механизма есть небольшое ограничение, это невозможность задать одной переменной несколько значений.

Почему такое поведение можно считать ограничением? Допустим, у нас есть документ, к которому надо прикрепить, а затем вывести, набор PDF файлов. Что можно сделать в данном случае? Можно вставить ссылки на все эти PDF в контент, однако для контент-менеджера это будет весьма трудоемкая и времязатратная задача. Можно создать чанк, в котором задавать ссылки на все PDF файлы, однако если таких документов будет много, то чанков не напасешься.

В данном случае, самым простым способом должно стать использование TV (Переменной Шаблона) с типом File, которой бы мы присвоили бы путь к файлу вместе с его именем, и которую бы использовали для формирования ссылок. Однако, в TV мы можем задать только одно значение, а делать большое количество TV не разумно.

Из данного положения есть выход. Это пакет для ModX Evolution под названием multiTV (http://modx.com/extras/package/multitv). Данный пакет был специально создан, что решить проблему с множественными значениями в Переменной Шаблона.

Использование данного пакета буду рассматривать на конкретном проекте под конкретную задачу, а именно связывание документа с неограниченным количеством PDF документов. Итак, устанавливаем пакет согласно инструкции, не забывая установить сниппет multiTV. После установки пакета создаем переменную, где мы будем хранить данные о файлых. В переменной указываем тип ввода: Custom Input, в качестве Возможного значения указываем: @INCLUDE/assets/tvs/multitv/multitv.customtv.php. Далее переходим к файлам конфигурации в папке assets/tvs/multitv/configs и правим default.config.inc.php.

Я не буду останавливаться на всех возможных значениях, а приведу сразу код с краткими пояснениями:

<?php
$settings['display'] = 'vertical';
$settings['fields'] = array(
	'file' => array(
		'caption' => 'File',
		'type' => 'file'
	),
	'title' => array(
		'caption' => 'Title',
		'type' => 'text'
	)
);
?>

В данном коде, мы указали, что переменная будет состоять из двух полей, а именно типа file (будет содержать путь к файлу) и типа text (будет содержать название, которым мы воспользуемся при формировании ссылки на PDF документ). Отображение полей будет происходить в вертикальном режиме. Все, теперь мы можем заполнить данную TV на каком-нибудь документе.

Картинка

Для вывода данных воспользуемся входящим в пакет сниппетом:

[[multiTV? &tvName=`tsnData` &docid=`[*id*]` &tplConfig=`` &outerTpl=`brOut` &rowTpl=`brRow`]]

Осталось прописать два чанка, это чанк brOut :

<div class="wrap">&nbsp;</div>
<strong>Каталоги</strong>
[+wrapper+]

и чанк brRow:

<span class="downtext">[+title+]</span>
<a href="[+file+]" class="downbox">Скачать</a>

Все, теперь любой контент-менеджер может прямо в интерфейсе заполнить все данные, загрузить файлы, после чего они автоматически будут выводиться в нашем шаблоне. Данное решение можно применять не только к файлам, но и ко всем возможным типам ввода TV, кроме url и richtext.

Комментарии (0)