MIGX, отображение названия вместо id в grid
Всем привет!
Давно интересует вопрос каким образом в MIGX в гриде отображать названия ресурсов вместо id.
Суть такая, есть некий набор данный, где в одном поле список значений tv, а в другом список выбора документов.

В гриде это потом отображается в виде id, что естественно неудобно для пользования.
Поэтому возникает вопрос, как правильно сделать отображение названия вместо id?
Буду признателен за любую наводку.
Давно интересует вопрос каким образом в MIGX в гриде отображать названия ресурсов вместо id.
Суть такая, есть некий набор данный, где в одном поле список значений tv, а в другом список выбора документов.

В гриде это потом отображается в виде id, что естественно неудобно для пользования.
Поэтому возникает вопрос, как правильно сделать отображение названия вместо id?
Буду признателен за любую наводку.
Комментарии: 28
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
вариант вызова сниппета в поле шаблона чанка ([[filterTvCats? &ids=`[[+root]]`]]) работает только в случае если выбран один элемент в списке, если более одного, параметр прилетает пустым.
Видимо дело в том что modx туда пытается передать массив, хз, что только не пробовал уже
но проблема в том что даже если в шаблон рендерера написать [[+root]], при наличии разделителя в выводе параметра, в ячейке пусто.
Т.е., сначала в поле «ID параметра» сохранится значение: «37», как и положено.
Потом произойдет рендер этого поля с помощью this.renderChunk.
Да, в таблице у вас отобразится не ID, а текст «Цвет» который соответствует этому ID.
Но! При этом, this.renderChunk — так же перезаписывает значение и в самой JSON-строке, которая сохраняется в TV поле.
По итогу, при попытке вывести данное TV поле на сайте, у вас выведется не «37», а «Цвет».
Зачем Bruno17 сделал таким образом — одному ему известно.
Поэтому, если вы не хотите чтобы this.renderChunk перезаписывал значение вашего TV, придётся писать свой собственный рендер.
Вот пример моего конфига вывода тайтла для ресурсов.
Почему не передается в сниппет-рендерер значение поля [[+cat]] (к примеру), если в селекте выбрано несколько категорий и [[+cat]] прекрасно передается, если выбрана одна категория?
В сниппете getPortfolioCategoryTitles логирую переменную input. Если в селекте выбрано одно значение, то в лог записывается id выбранного ресурса. Если выбрано несколько — в лог пишется строка "[[+cat]]" — skrinshoter.ru/s/031122/ZSCrDuDu
TV «category_list» — поле типа список со множественным выбором, возможные значения:
Я обычно такие вещи без TV делаю.
Сразу советую перейти и переделать вызов MIGX через форму как Илья Уткин писал.
а по существу есть ММммммаааленький нюанс в парсере MODX.
Заключается он в том что при обработке поля renderchunktpl если у нас 1 значение — это строка, а если там несколько значений для типа listbox-multiple, то там в результате массив или json смотря с какой стороны смотреть.
А как всем
неизвестно массивы у нас в парсере преобразуются в НОВЫЕ плейсхолдеры с ключем который приходит из этих массивов.В данном случае у нас ключ это простой индекс от 0 и до бесконечности.
И чтобы получить перечень значений, нужно составить последовательность плейсов в сниппете и вернуть именно в этом формате строкой:
И тогда все будет хорошо и вы увидете отрендеренные значения.
Если не поняли — кидайте код сниппета.
Плюсики в КАРМУ. приветствуются.
Тоже вопрос — есть какие-то дополнительные плюшки, если через конфигуратор конфиг делаю? Как-то изначально привык json-код в доп. поле вставлять, получается быстрее, чем по всем формочкам пробегаться
Не нашел другого варианта, чтобы вывести в MIGX селект со списком ресурсов. В TV category_list настраиваю выборку, в MIGX эту тивиху подцепляю
В карму — завсегда c удовольствием))
Но в момент когда сниппет у нас будет срабатывать плейсхолдеры уже будут в системе.
Это значит что наличие их мы сможем проверить через:
Остается прогнать в цикле и проверить на пустоту или наличие.
Про плюшки:
ну опечаток со скобками и прочего будет меньше… — накликал и все отлично.
плюс — надо добавить поле — пару кликов и готово, а с json надо возиться и помнить все поля. В редакторе — просто удобнее расширять и править. ну и переносить из проекта в проект — вообще просто.
Если осовите редактор, то и такие вещи проще там делать. вот хорошая общая статья:
modx.pro/howto/16558
Я же правильно пишу: cat.0? Возможно, какой-то префикс ещё должен быть?
Вот рабочий вариант оставлю тут для себя и всех:
Сниппет вызывается так без знака воскл. !: Сам сниппет: alextest
Но тут нюанс вылез: если более одной строки в доп поле, то значение рендера берется от первой строки.
skrinshoter.ru/s/031122/kYuN7bAB?a
skrinshoter.ru/s/031122/LzRFR73f?a
В таблице в обоих строках выдает айдишники главной страницы и роботса
skrinshoter.ru/s/031122/tOi0sLSb
Судя по логам, обращение к сниппету рендера происходит только один раз, несмотря на то, что строк две… и да, вызов некешированного сниппета не прокатывает
Нам нужно передавать какой-то простой уникальный параметр с уникальным значением, чтобы вызов сниппета не брался из кеша.
Думаю, для этого подойдет MIGX_id. И тогда можно добавить к вызову:
В итоге, сниппет для вывода названий ресурсов вместо id у меня получился такой:
Остается лишь переменную $limit как-то динамически найти. У меня получилось только доп запросом к БД по нужным параметрам выборки, других вариантов не увидел. Ну, или если заведомо количество категорий ограничено, то — возможно — проще захардкодить так
Этот лимит только для одного поля ввода. Так что должно хватить с лихвой.
1. в Collums нужно создать отдельное поле для рендера.
2. В нем активируем this.renderChunk и в renderChunk template вызываем созданный сниппет
Типо такой:
[[migxIDtoPagetitle?data=`[[+players]]` &chtougodno=`[[+MIGX_id]]` ]]
3. И код сниппета migxIDtoPagetitle: modx.pro/help/6945#comment-136437
где [[+idmy]] — название поля в migx где id ресурса.