TV для выбора ресурса с нужным родителем и поиском в MODX Revolution
Иногда возникает необходимость создать дополнительное TV-поле, которое позволит выбрать конкретный ресурс. При этом чтобы валились не все ресурсы сайта, а ресурсы из конкретного родителя. Но даже при этом ресурсов бывает много, требуется поиск по заголовку. Вводим несколько букв и нам подсвечиваются результаты, как то так:
Приступим к созданию такой TV.
Создадим сниппет «listMyResources».
В нём наша логика выбора ресурсов, беруться только опубликованные ресурсы и с родителем, которого мы укажем в ТВ, это позже.
<?php
$output[]= '-==-';
$parents = $modx->getCollection('modResource',array(
'parent' => $modx->getOption('parent',$scriptProperties),
'published' => 1,
));
foreach ($parents as $res) {
$output[]= $res->get('pagetitle').'=='.$res->get('id');
}
$out = implode("||",$output);
return $out;
Создаём дополнительное поле.
Тип ввода: Список (одиночный выбор).
В «Возможные значения» пишем следующее:
@EVAL return $modx->runSnippet('listMyResources',array('parent' => 2));
Вместо «2» указываем нужного родителя из которого мы хотим брать ресурсы.
Использование поля.
После этого присвойте ТВ конкретному шаблону и работайти с ним.
На сайт же выводится не заголовок,а id ресурса. Единственная особенность при выводе это то, что если ресурс не выбран, вместо пустоты выводися «-».
Поэтому проверку на пустоту делать требуется так:
Через плейсхолдеры:
[[*mytv:is=`-`:then=`Поле не заполнено`:else=`ID ресурса: [[*mytv]]`]]
Через Fenom
{if $_modx->resource.mytv != '-'}
ID ресурса: {$_modx->resource.mytv}
{else}
Поле не заполнено
{/if}
Собственно и всё, думаю, как выводить информацию о ресурсе через его ID вы знаете как, если нет, пишите в комментариях.
Комментарии