Структурированный список в tv-параметре

Здравствуйте!
Подскажите пожалуйста, как сделать в тв-параметре структурированный по ресурсам выпадающий список?
Необходимо, чтобы выпадащий список выглядел так:
Категория 1
— Параметр 1
— Параметр 2
Категория 2
— Параметр 3
— Параметр 4

Нашел пример, как вывести просто список ресурсов:
@EVAL return $modx->runSnippet('getResources',array('parents'=>5,'depth'=>3,'limit'=>0,'where'=>'{"isfolder:=":1}','sortby'=>'{"pagetitle":"ASC"}','tpl'=>'@INLINE [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
Но результат выглядит не совсем правильно:
Категория 1
Категория 2
Параметр 1
Параметр 2
Параметр 3
Параметр 4
Sphinx
12 января 2015, 07:00
modx.pro
3
3 872
0

Комментарии: 7

Максим Кузнецов
12 января 2015, 11:26
1
0
Выпадающий список данной структуры реализуется за счет тега optgroup. Пример:

<select>
  <optgroup label="Категория 1">
    <option value="1">Параметр 1</option>
    <option value="2">Параметр 2</option>
  </optgroup>
</select>
Т.е. нужно модифицировать формат вывода getResourse к данной структуре.
    Sphinx
    12 января 2015, 11:41
    0
    Вот это мне впринципе в итоге и нужно. Только это в админ. панели надо.
    Я так понимаю, что в поле «Возможные значения» надо как-то прописать, возможно даже запуск сниппета Wayfinder'а, чтобы он правильно строил список ресурсов.
    На страницах сайта, с помощью Wayfinder'а вообще это можно вывести без проблем, но вот никак не соображу, как это можно прикрутить к tv-параметру в поле «Возможные значения».
      Максим Кузнецов
      12 января 2015, 11:47
      +1
      В «возможные значения» tv прописываем
      @EVAL return $modx->runSnippet('любое_название_сниппета_который_есть_в_системе');
      — к примеру, можно создать свой сниппет «customTvList» и запустить в нем wayfinder или любой другой подходящий для задачи сниппет:

      $params = array();
      		$params['tpl'] = "tpl.Custom.List";
      		$result = $modx->runSnippet('wayfinder', $params);
      		return $result;
      Здесь же можно и ограничить вывод возможных значений.
        Sphinx
        12 января 2015, 12:00
        0
        Ок, спасибо. Буду пробовать.
          Sphinx
          13 января 2015, 13:32
          0
          MODX великая сила) чем дальше вникаешь, тем больше возможностей)
          Жаль конечно, что не получилось у меня сделать список как описано в первом посте, но начав делать — получилось даже удобнее, чем предпологалось изначально. Но появились и новые вопросы.

          В возможные значения тв-параметра я указываю, к примеру:
          @EVAL return $modx->runSnippet('МойСниппет',array('id'=>5));
          Можно ли вместо пятерки (5) передать id редактируемого ресурса (или любое другое поле у редактируемого ресурса)? Т.е. я открываю ресурс для редактирования, нахожу свой тв-параметр, а в него уже передалось id этого ресурса. Может быть в сниппете можно вытащить id'шник редактируемого ресурса? Я пока что ничего лучше не нашел, как в сниппете указать
          $id = $_GET['id'];
          Но я полагаю, что этот вариант не очень правильный…

          А второй вопрос, так это как сделать в выпадающем списке первый вариант «Не выбрано», т.е. список бы получился:
          Не выбрано
          Параметр 1
          Параметр 2
          И при выборе «Не выбрано» в табличку со значениями tv-параметров ничего бы не записывалось. А то получается, что список у меня появляется и выбор падает сразу на 1 пункт и при сохранении его и заносит, а хотелось бы, чтобы была возможность не выбирать параметры. Как такое можно реализовать?
            Максим Кузнецов
            13 января 2015, 13:36
            0
            $_GET['id'] скорее всего не будет работать при «создании» документа, т.к. айди ему присваивается только при первом сохранении.

            По второму вопросу — что мешает в вызове своего сниппета в самом начала при помощи echo добавить нужную строку без параметра value?
              Sphinx
              13 января 2015, 13:48
              0
              1.
              $id = $_GET['id'];
              Этот вариант работает, при редактировании ресурса он возвращает id ресурса, все как положено, а при создании нового ресурса он возвращает undefined. Так что, впринципе, можно уже и с этим работать) Волнует вопрос, правильно ли так делать?

              2. Точно, спасибо. Сниппет возвращает строку:
              Параметр 1==5||Параметр 2==10
              я просто впереди еще руками прописал:
              Не задано==||Параметр 1==5||Параметр 2==10
              Самое главное, что в базе не создается запись о данном tv-поле. Я что-то изначально думал, что запись создастся, но с пустым значением. Еще раз спасибо)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7