multiTV - зачем он нужен и где используется
Часто бывает так, что необходимо привязать к какой-нибудь страничке дополнительные данные, редактируя которые, мы могли бы с лёгкостью могли изменять контент, при этом не прописывая какого-нибудь дополнительного HTML-кода, поскольку сама система делала бы это за нас самостоятельно. Отчасти эту проблему решают дополнительные TV-поля. Но как быть, если к примеру у нас к странице привязаны ссылки на наши документы? Ведь по сути мы имеем дело с одной сущностью (ссылка), которая может повторяться у нас несколько раз. В Modx Evo мы могли бы создать дополнительные поля и назвать их скажем "Ссылка1", "Ссылка2" и т. д.? И вроде бы на первый взгляд это решает проблему, но это только на первый взгляд. Ведь мы не знаем точно, сколько таких ссылок на каждый документ у нас будет. Более того, затем мы возможно бы решили, что нам нужно создать поле "анкор", то есть слово, щёлкнув на которое, мы могли бы перейти к скачке документа. Можно было действовать и по аналогии выше, перечислять поля с анкорами. Но это опять же, избыточность, ещё больше кода, ну и неловкое ощущение от молчаливого вопроса - "а можно ли было сделать как-то лучше?". Вот для этого собственно и был создан сниппет multiTV, который решает вышеописанные проблемы. При установке он добавляет дополнительный тип поля, в котором могут храниться другие поля.
Итак, предположим мы хотим привзять к документу какое-то n-ое значение ссылок, у которых помимо прочего будут названия. Алгоритм создания будет таким:
- Создаём поле, скажем info. Тип ввода у него будет таким - multitiv.
- Переходим в папку /assets/tvs/multitv/configs и создаём файл следующего вида - info.config.inc.php Хочу обратить ваше внимание на то, что слово info в названи файла было выбрано неспроста, поскольку это слово должно быть одинаковым с тем полем, к которому мы хотим сделать привязку. К слову, в данной папке уже находятся примеры готовых конфигураций, поэтому за основу вы можете взять одну из уже готовых.
-
Редактируем файл конфигурации. У меня конфигурация получилась следующего вида:
<?
$settings['display'] = 'vertical';
$settings['fields'] = array(
'file' => array(
'caption' => 'Прикреплённый файл',
'type' => 'file'
),
'text' => array(
'caption' => 'Якорь ссылки',
'type' => 'text'
)
);
$settings['templates'] = array(
'outerTpl' => '<div class="files-info">[+wrapper+]</div>',
'rowTpl' => '
<a href="[+file+]">[+text+]</a><br />
'
);
?>Как видим, конфигурация представлена в виде массива:
display - в каком виде будет отображаться процесс добавления в админке,
fields - настройки самих полей,
уровень ниже - название самого поля (ключ массива), значение которого можно впоследствии использовать в шаблоне,
caption - заголовок поля,
type - тип поля (text - поле для ввода текста, file - поле выборки файла, image - выбор картинки и т. д.)templates - шаблоны вывода.
outerTpl - обёртка для всех строк,
rowTpl - это шаблон одной строки, в нашем случае - ссылки. - Далее переходим к документу и заполняем данными наши поля.
- Вызываем в шаблоне, в том месте, где нужно вывести поля, сниппет multiTV:
[!multiTV? &tvName=`info` &display=`all`!]
Параметры сниппета:
&tvName=`info` - название поля, значения которого нужно вывести,
&display=`all` - сколько строк отображать, в данном случае - все.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()