firstgm 27 апреля 2015 2 1
Здравствуйте! Подскажите пожалуйста, как вывести во фронтенде 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 комментарий
Fi1osof1
Fi1osof 27 апреля 2015г в 07:55 #
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(...))
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.