max2016 03 марта 2016 2 15
Есть необходимость добавить в 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 и вставлять туда свой список, думаю что туда вообще нельзя попасть.
15 комментариев
d
derzaiii 12 марта 2016г в 12:50 #
А можете показать каким образом выводится это на сайт?
Потому как сделал всё по вашему примеру (только запятые лишние убрал) и у меня всё прекрасно вывелось
Fi1osof1
Fi1osof 12 марта 2016г в 12:54 #
[{«caption»:«Элементы»,«fields»: [
{«field»:«list1»,«caption»:«Выбор из списка»,«inputTV»:«select_list1»},
]}]

Запятые здесь ппц какие лишние. Если браузеры какие-то на уровне JS еще переварят (хотя Осел всегда матерился), на уровне php json_decode() не разберет.
d
derzaiii 12 марта 2016г в 13:31 #
Извиняюсь — поторопился с выводами. Действительно не работает: При любом выводе выходит только то значение которые изначально выбрано в TV — select_list1. Поиск в сети подтвердил — такой вывод не будет работать, остается только тот который Вы сами предложили:
[{"caption":"Элементы","fields": [
{"field":"list1","caption":"Выбор из списка","inputTVtype":"listbox","inputOptionValues":"первый==1||втоорой==2||третий==3
"},
]}]
Fi1osof1
Fi1osof 12 марта 2016г в 13:54 #
Народ, я вас не понимаю. Что вы паритесь? Покажите какое значение у вас находится в базе данных в таблице TV-параметров? Так как вы мигу используете, у вас там должен быть JSON, а в нем значение этого списка только числовое (например 1,2 или 3, так как первый==1 «первый» — это для отображения в интерфейсе админки, а 1 — это именно значение).
А теперь вопрос на засыпку: как именно вы пытаетесь вывести значение на странице?
d
derzaiii 12 марта 2016г в 14:07 #
Исходя из описания выше, — вывожу так:
[[!getImageList?
    &tvname=`test`
    &tpl=`@CODE: [[+list1]]`
]]
Fi1osof1
Fi1osof 12 марта 2016г в 14:15 #
На сколько можно судить по названию сниппета, он все-таки рассчитан на вывод списка картинок, а не просто произвольных значений TV.

Еще раз: покажите что у вас в БД находится для сохраненного ТВ-значения, в таблице modx_site_tmplvar_contentvalues
d
derzaiii 12 марта 2016г в 14:17 #
[{"MIGX_id":"4","list1":"1"},{"MIGX_id":"5","list1":"3"},{"MIGX_id":"6","list1":"2"}]
Fi1osof1
Fi1osof 12 марта 2016г в 14:22 #
Вот. Значит в БД у вас хранится то, что надо. Попробуйте в консоли выполнить
$doc = $modx->getObject('modResource', $doc_id);
$value = $doc->getTVValue($tv_id|$tv_name);
print $value;
print '<br /><pre>';
print_r(json_decode($value));
d
derzaiii 12 марта 2016г в 17:17 #
Не спорю, для тех кто с xPDO на ты это может быть идеальный вариант. А вот для меня например логичнее и проще обойтись стандартными методами.
Обращаюсь к ТС — у вас всё правильно построено, но есть один нюанс:
Чтобы всё выводилось нормально, создайте новый TV — select_list2 (по тому же типу что и select_list1) — и не назначайте его!!! никакому шаблону!!!
Затем сделайте как делали раньше.
Надеюсь понятно описал.
Fi1osof1
Fi1osof 12 марта 2016г в 17:28 #
xPDO-пример был показан, чтобы вы увидели в каком виде вообще у вас исходные данные лежат. А далее уже сами решайте что с ними делать и как.

А вот предложения «не назначайте его!!! никакому шаблону!!!» — на магию походят. В программировании не должно быть магии, должно быть четкое объяснение всему. У вас есть четкое объяснение зачем создавать второе поле, да еще и которое не надо назначать никакому шаблону? Если не желаете отвечать, можете проигнорировать.
d
derzaiii 12 марта 2016г в 17:42 #
Создание второго подобного поля — скорее пример чтобы проверить что всё работает. Можно конечно просто залезть в базу и очистить значение первого поля select_list1, но это уже сложнее.
Дело в том что если назначить его шаблону, то можно и изменить его значение в документе. А вызов
[[!getImageList?
    &tvname=`test`
    &tpl=`@CODE: [[+list1]]`
]]

будет выводить значение не встроенного в MIGX поля, а обычного.

зы какая у Вас странная манера общаться. Или мне показалось?
Fi1osof1
Fi1osof 12 марта 2016г в 18:36 #
Дело в том что если назначить его шаблону, то можно и изменить его значение в документе.
Надо логически четко отделять TV-поле, используемое в миге и поле, используемое самостоятельно. Уточняю: вот у вас есть ТВ-поле list1, вы создаете еще migx-поле migxtv и в нем помимо всего прочего еще и прописываете «inputTV»:«list1» (не inputTVType, которое будет определять просто тип поля, а именно inputTV, которое указывает какое TV-поле использовать в этом элементе). Так вот, если вы в документе редактируете значение самого поля list1, как самостоятельного TV-поля, то и значение его будет записываться именно для поля list1. А вот если вы редактируете migx-поле migxtv, то значение записывается именно для migx-поля, а не для list1. Соответственно, значения этих полей будут выводиться отдельно для плейсхолдеров [[+list1]] и [[+migxtv]]

зы какая у Вас странная манера общаться. Или мне показалось?
Не показалось.
d
derzaiii 12 марта 2016г в 19:21 #
Надо логически четко отделять TV-поле, используемое в миге и поле, используемое самостоятельно.
Полностью согласен, но на практике получается иначе: если назначить TV шаблону — стандартный вызов тянет именно его.
Fi1osof1
Fi1osof 12 марта 2016г в 19:25 #
Не стоит в этом спорить со мной. Стандартный вызов тянет ровно то, что он и должен тянуть — значения имеющихся полей. В составе migx-поля другая ТВшка используется только как элемент интерфейса для редактирования migx-полей, но ни как хранилище его значений и тем более не как рендерер для вывода значений на стороне фронта.
d
derzaiii 12 марта 2016г в 19:30 #
Спорить?)) Даже не пытался. Я лишь воссоздал условия данные ТС и нашел причину по которой неправильно работала конструкция.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.