26 апр. 2015 г., 21:52

Вывод Select (список) из TV

Здравствуйте! Подскажите пожалуйста, как вывести во фронтенде Select-список из TV? Что-то голова уже не варит… Создал TV: параметры ввода:
@SELECT pagetitle, id FROM modx_site_content WHERE parent=18
В ресурсах >> дополнительные поля >> выводится нормальный список с категориями — ОК А во фронтенде, как?
Создал еще снипет:
/* ShowDropdown сниппет */ $items = $modx->getOption('items', $scriptProperties, 'Нет данных для показа'); $multiple = $modx->getOption('multiple', $scriptProperties, false); /* Задать Tpl для каждого вывода опции */ $tpl = ' <option value="[[+item]]">[[+item]]</option>'; /* Конвертировать значения через запятую в массив */ $items = explode(',', $scriptProperties['items']); /* Проверить создаём ли мы список с мультивыбором */ if ($multiple) { $output = '<select id="profile" multiple="multiple">'; } else { $output = '<select id="profile">'; } /* Создание внутреннего HTML */ foreach ($items as $item) { $output .= "\n" . str_replace('[[+item]]', trim($item), $tpl); } /* добавить закрывающий тег */ $output .= "\n</select>"; /* возвратить законченный HTML */ return $output;
Вызываю его в чанке:
[[ShowDropdown? &items=`[[*category]]` &multiple=`0`]]
Но в выпадающем списке на странице пусто.
1. В админке за вывод таких вещей отвечают inputRenderer и ExtJS. Просто так у вас во фронте ничто работать не будет. 2.
&items=`[[*category]]`
А с чего вы взяли, что у вас поле документа должно в себе нести выборку по вашему запросу? Оно несет конечное установленное значение, но никак не выборку данных по запросу. 3. Вот поэтому мы Смарти и юзаем, чтобы не заморачиваться с такими простыми задачами. Один из вариантов:
<select id="profile"> {foreach $modx->getIterator('modResource', ['parent' => 18]) as $doc} <option value="{$doc->id}">{$doc->pagetitle}</option> {/foreach} </select>
4. Если вы совсем по религии хотите сделать (чтобы не было двух отдельных запросов в админке и фронте), то правильней делать так: создавать сниппет, в котором будет выполняться формирование запроса и набивка полученных данных. В нем надо будет рулить по условию тип вывода — для ТВшки все данные должны быть вида Заголовок1==id_1||Заголовок2==id_1....., а для фрона как раз своим способом и набивайте HTML. Или возвращайте JSON-строку и если используете Смарти, то там выполняйте JSON-декодинг и набивайте конечный HTML. А в ТВшке в качестве возможных значений указывайте @CHUNK, в котором будет вызываться этот сниппет (к сожалению нельзя сразу указать сниппет, ТВшки этого не умеют, хотя можно еще использовать @EVAL return $modx->runSnippet(...))

Добавить комментарий