Снова о дополнительных TV-полях в TicketForm
Приветствую!
Вопрос, касающийся дополнительных tv-параметров для формы Tickets.
Было время, когда на многих ресурсах поднимался этот вопрос, но потом все как-то дружно замолчали, как будто узнали решение :) И всё, что я сейчас смог найти, это комментарии двух- а то и трёхлетней давности, из которых толком ничего почерпнуть не получилось.
Суть задачи в следующем: нужно добавить несколько полей типа select в форму создания тикета.
С обычными текстовыми полями проблем не возникает.
Выпадающий список оформил так:
Но в форме выпадающий список не работает — визуально он отображается, но самих данных в нём нет.
Из комментариев понял, что для отображения выпадающего меню нужно написать отдельный сниппет. А что это за сниппет, и как его прикрутить к форме, толком не объясняется.
Очень прошу помочь! без дополнительных полей никак не обойтись.
Вопрос, касающийся дополнительных tv-параметров для формы Tickets.
Было время, когда на многих ресурсах поднимался этот вопрос, но потом все как-то дружно замолчали, как будто узнали решение :) И всё, что я сейчас смог найти, это комментарии двух- а то и трёхлетней давности, из которых толком ничего почерпнуть не получилось.
Суть задачи в следующем: нужно добавить несколько полей типа select в форму создания тикета.
С обычными текстовыми полями проблем не возникает.
Выпадающий список оформил так:
<select name="tv_name" id="tv_id">[[+tv_name]]</select>
У сниппета в настройках allowedFields добавил tv_name.Но в форме выпадающий список не работает — визуально он отображается, но самих данных в нём нет.
Из комментариев понял, что для отображения выпадающего меню нужно написать отдельный сниппет. А что это за сниппет, и как его прикрутить к форме, толком не объясняется.
Очень прошу помочь! без дополнительных полей никак не обойтись.
Комментарии: 15
Неужели никому не нужны селект-боксы в тикетах?!
Я извиняюсь, а куда это нужно прописать? ) в плагин Tickets или сниппет TicketForm?
Пробовал и туда, и туда — безрезультатно (
Пробовал и туда, и туда — безрезультатно (
новый плагин создайте, событие OnDocFormSave
Множественный селект нужно чтобы пользователь мог выбирать, в этом загвоздка вся.
$services_services = implode("||", $_POST['services_services']);
if (!$resource->setTVValue('services_services', $services_services)) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'services_services - ERROR');
}
в админке разделитель ||
Запутался немного.
У меня параметр: tv1
Возможные значения ввода: Квартиры||Комнаты||Гаражи||Офисы||
В чанке с формой такой код:
У меня параметр: tv1
Возможные значения ввода: Квартиры||Комнаты||Гаражи||Офисы||
В чанке с формой такой код:
<select name="tv1" id="ticket-type">[[+tv1]]</select>
Создал плагин ticket_select с кодом:if($mode == 'new' && $resource->class_key == 'Ticket' && $modx->event->name == 'OnDocFormSave'){
$resource->setTVValue('tv1', $_POST['tv1']);
}
Куда нужно прописать вот этот код и что в нем нужно заменить?$services_services = implode("||", $_POST['services_services']);
if (!$resource->setTVValue('services_services', $services_services)) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'services_services - ERROR');
}
Весь код плагина
<?php
if($mode == 'new' && $resource->class_key == 'Ticket' && $modx->event->name == 'OnDocFormSave'){
$tv1 = implode("||", $_POST['tv1']);
if (!$resource->setTVValue('tv1', $tv1)) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'tv1 - ERROR');
}
}
<select name="tv1" id="ticket-type">[[+tv1]]</select>
вам тут равнозначные параметрам админки сделать надо, или спарсить все возможные значения
Заполнил все option вручную — заработало. Спасибо!
А как парсить значения? ) чтобы каждый раз в чанк не лезть?
А как парсить значения? ) чтобы каждый раз в чанк не лезть?
у меня есть сниппет TicketGetTV, переделайте под свои нужды. но у меня он висит на update тикета, ибо тикеты создаются при регистрации (компании).
вызов такой, name название tv
вызов такой, name название tv
[[!TicketGetTV? &tid=`[[+id]]` &name=`services_services`]]
код<?php
$title = (!empty($title) ? $title : 'Услуги');
$output = '';
// current tv $name values
$page = $modx->getObject('modResource', $tid);
$tv_current_array = $page->getTVValue($name);
$tv_current = (!empty($tv_current_array) ? $tv_current = explode("||", $tv_current_array) : array());
// all tv $name values
$tvs = $modx->getObject('modTemplateVar', array('name' => $name));
$tv_all = explode('||', $tvs->get('elements'));
if($type == 'select'){
foreach ($tv_all as $i => $val){
$output .= '<option ' . (in_array ($val, $tv_current) ? 'selected' : '') . ' value="'.$val.'">'.$val.'</option>';
}
return '<div class="form-group params '.$name.'"><label>'.$title.'</label><div class="inner">
<select class="chosen-select" multiple name="'.$name.'[]">'.$output.'</select></div><div class="clear"></div></div>';
}else{
$i = 0; $b = 0;
foreach ($tv_all as $i => $val){
$output .= '<label class="checkbox" for="'.$name.'_'.$i++.'"><input type="checkbox" id="'.$name.'_'.$b++.'" name="'.$name.'[]"
' . (in_array ($val, $tv_current) ? 'checked' : '') . ' value="'.$val.'"><i></i><div>'.$val.'</div></label>';
}
return '<div class="form-group params '.$name.' hidden"><label class="title_block">'.$tvs->get('caption').'</label><div class="inner_block">'.$output.'</div><div class="clear"></div></div>';
}
Огромно спасибо! Буду разбираться и прикручивать )
Здравствуйте подскажите этот плагин работает с select multiple множественным выбором?
В логи пишет ошибку:
[2015-04-24 11:37:54] (ERROR @ /home/bh57920/public_html/core/cache/includes/elements/modplugin/10.include.cache.php : 3) PHP warning: implode(): Invalid arguments passed
[2015-04-24 11:37:54] (ERROR @ /assets/components/tickets/action.php) modTemplateVarResource: Attempt to set NOT NULL field value to NULL
условие добавьте если
if(!empty($_POST['tv1']))
Здравствуйте, столкнулся с похожей задачей и использовал ваш плагин, сохранение идёт, но у меня чекбоксы берутся из страницы с тегами:
т.е. со стороны админки чекбоксы не отмечаются как активные.
Наверное есть смысл переписать конструкцию в tv?
<select name="tegs[]" class="form-control" id="ticket-tegs" multiple>
[[pdoResources?
&parents=`5`
&depth=`0`
&tpl=`@INLINE <option value="[[+id]]">[[+pagetitle]]</option>`
]]
</select>
В tv такая конструкция:@EVAL return $modx->runSnippet('pdoMenu',array('parents'=>5,'tplOuter'=>'@INLINE [[+wrapper]]','tpl'=>'@INLINE [[+pagetitle]]==<span><a href="/[[+uri]]">[[+pagetitle]]</a></span>||'));
На выходе получается, сохранение идёт но, как будто-бы передаёт значения в строку.т.е. со стороны админки чекбоксы не отмечаются как активные.
Наверное есть смысл переписать конструкцию в tv?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.