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

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

В гриде это потом отображается в виде id, что естественно неудобно для пользования.
Поэтому возникает вопрос, как правильно сделать отображение названия вместо id?
Буду признателен за любую наводку.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
Комментарии: 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 ресурса.