3 мар. 2016 г., 10:12

MigX, Создание поля типа listbox

Есть необходимость добавить в TV типа MigX свое поле типа listbox. Делаю следующим образом: В поле Вкладки формы пишу:
[{"caption":"Элементы","fields": [ {"field":"list1","caption":"Выбор из списка","inputTV":"select_list1"}, ]}]
(Вместо inputTV пробовал inputTVtype — в итоге тип поля становится текстовым) В поле Разметки колонок:
[ {"header": "Выбор из списка", "sortable": "false", "dataIndex": "list1"}, ]
Для TV select_list1 в поле Возможные значения пишу:
первый==1||втоорой==2||третий==3
Для админки все отлично отрабатывает, все значения в списке, и отображаются в таблице. Проблема с отображением на сайте, вместо любого из заданных значений 1,2,3 выводит 111111111. Уже все перепробовал.(в том числе и менял параметры вывода в select_list1) Такая ситуация происходит со всеми типами TV select_list1, и для текстового поля и для числа, даты, чекбокса и т.д. Подскажите, пожалуйста, в чем может быть причина? Есть идея про такой вариант реализации:
[{"caption":"Элементы","fields": [ {"field":"list1","caption":"Выбор из списка","inputTVtype":"listbox","inputOptionValues":"Список параметров"}, ]}]
Но не получается влезть в поле inputOptionValues и вставлять туда свой список, думаю что туда вообще нельзя попасть.
А можете показать каким образом выводится это на сайт? Потому как сделал всё по вашему примеру (только запятые лишние убрал) и у меня всё прекрасно вывелось
[{«caption»:«Элементы»,«fields»: [ {«field»:«list1»,«caption»:«Выбор из списка»,«inputTV»:«select_list1»}, ]}]
Запятые здесь ппц какие лишние. Если браузеры какие-то на уровне JS еще переварят (хотя Осел всегда матерился), на уровне php json_decode() не разберет.
Извиняюсь — поторопился с выводами. Действительно не работает: При любом выводе выходит только то значение которые изначально выбрано в TV — select_list1. Поиск в сети подтвердил — такой вывод не будет работать, остается только тот который Вы сами предложили:
[{"caption":"Элементы","fields": [ {"field":"list1","caption":"Выбор из списка","inputTVtype":"listbox","inputOptionValues":"первый==1||втоорой==2||третий==3 "}, ]}]
Народ, я вас не понимаю. Что вы паритесь? Покажите какое значение у вас находится в базе данных в таблице TV-параметров? Так как вы мигу используете, у вас там должен быть JSON, а в нем значение этого списка только числовое (например 1,2 или 3, так как первый==1 «первый» — это для отображения в интерфейсе админки, а 1 — это именно значение). А теперь вопрос на засыпку: как именно вы пытаетесь вывести значение на странице?
Исходя из описания выше, — вывожу так:
[[!getImageList? &tvname=`test` &tpl=`@CODE: [[+list1]]` ]]
На сколько можно судить по названию сниппета, он все-таки рассчитан на вывод списка картинок, а не просто произвольных значений TV.
Еще раз: покажите что у вас в БД находится для сохраненного ТВ-значения, в таблице modx_site_tmplvar_contentvalues
[{"MIGX_id":"4","list1":"1"},{"MIGX_id":"5","list1":"3"},{"MIGX_id":"6","list1":"2"}]
Вот. Значит в БД у вас хранится то, что надо. Попробуйте в консоли выполнить
$doc = $modx->getObject('modResource', $doc_id); $value = $doc->getTVValue($tv_id|$tv_name); print $value; print '
';
print_r(json_decode($value));
Не спорю, для тех кто с xPDO на ты это может быть идеальный вариант. А вот для меня например логичнее и проще обойтись стандартными методами. Обращаюсь к ТС — у вас всё правильно построено, но есть один нюанс: Чтобы всё выводилось нормально, создайте новый TV — select_list2 (по тому же типу что и select_list1) — и не назначайте его!!! никакому шаблону!!! Затем сделайте как делали раньше. Надеюсь понятно описал.
xPDO-пример был показан, чтобы вы увидели в каком виде вообще у вас исходные данные лежат. А далее уже сами решайте что с ними делать и как.
А вот предложения «не назначайте его!!! никакому шаблону!!!» — на магию походят. В программировании не должно быть магии, должно быть четкое объяснение всему. У вас есть четкое объяснение зачем создавать второе поле, да еще и которое не надо назначать никакому шаблону? Если не желаете отвечать, можете проигнорировать.
Создание второго подобного поля — скорее пример чтобы проверить что всё работает. Можно конечно просто залезть в базу и очистить значение первого поля select_list1, но это уже сложнее. Дело в том что если назначить его шаблону, то можно и изменить его значение в документе. А вызов
[[!getImageList? &tvname=`test` &tpl=`@CODE: [[+list1]]` ]]
будет выводить значение не встроенного в MIGX поля, а обычного.
зы какая у Вас странная манера общаться. Или мне показалось?
Дело в том что если назначить его шаблону, то можно и изменить его значение в документе.
Надо логически четко отделять TV-поле, используемое в миге и поле, используемое самостоятельно. Уточняю: вот у вас есть ТВ-поле list1, вы создаете еще migx-поле migxtv и в нем помимо всего прочего еще и прописываете «inputTV»:«list1» (не inputTVType, которое будет определять просто тип поля, а именно inputTV, которое указывает какое TV-поле использовать в этом элементе). Так вот, если вы в документе редактируете значение самого поля list1, как самостоятельного TV-поля, то и значение его будет записываться именно для поля list1. А вот если вы редактируете migx-поле migxtv, то значение записывается именно для migx-поля, а не для list1. Соответственно, значения этих полей будут выводиться отдельно для плейсхолдеров [[+list1]] и [[+migxtv]]
зы какая у Вас странная манера общаться. Или мне показалось?
Не показалось.
Надо логически четко отделять TV-поле, используемое в миге и поле, используемое самостоятельно.
Полностью согласен, но на практике получается иначе: если назначить TV шаблону — стандартный вызов тянет именно его.
Не стоит в этом спорить со мной. Стандартный вызов тянет ровно то, что он и должен тянуть — значения имеющихся полей. В составе migx-поля другая ТВшка используется только как элемент интерфейса для редактирования migx-полей, но ни как хранилище его значений и тем более не как рендерер для вывода значений на стороне фронта.
Спорить?)) Даже не пытался. Я лишь воссоздал условия данные ТС и нашел причину по которой неправильно работала конструкция.

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