Группа чекбоков в форме
Создаю ТВ типа чекбокс, ставлю значение Moscow||SPB, внутри формы прописываю:
Вызов формы созержит:
&allowedFields=provides
&validate=provides:required[]
Но форма после нажания на кнопку не реагирует. Как правильно прописывать группу чекбоксов внутри формы?
<div class="form-check">
<input class="form-check-input" name="provides[]" type="checkbox" value="Moscow">
<label class="form-check-label" for="Moscow">Moscow</label>
<input class="form-check-input" name="provides[]" type="checkbox" value="SPB">
<label class="form-check-label" for="SPB">Incall</label>
</div>
Чекбокс может быть выбран как первый, так и второй.Вызов формы созержит:
&allowedFields=provides
&validate=provides:required[]
Но форма после нажания на кнопку не реагирует. Как правильно прописывать группу чекбоксов внутри формы?
Комментарии: 24
Параметр validate в FormIt не понимает квадратные скобки, ну и как следствие если ты уберёшь, то для вывода ошибку нужно будет отдельный блок создать с классом .error_provides
я что-то на самом деле потерялся с этими чекбоксами в тикете. Вроде бы ничего сверхестественного нет, но не работает. ТВ provides. Из фронта заполняю чекбоксы таким образом:
<div class="col-md-6 col-sm-12">
<input type="hidden" name="provides" value="" />
<div class="checkbox">
<label>
<input type="checkbox" name="provides[]" value="Outcall">
Outcall
</label>
<label>
<input type="checkbox" name="provides[]" value="Incall">
Incall
</label>
<span class="error">[[!+fi.error.provides]]</span>
</div>
</div>
Вызов тикетформ:[[!TicketForm?
&allowedFields=`provides`
&tplFormCreate=`tickets.form.create.tpl`
&tplFormUpdate=`tickets.form.update.tpl`
&redirectUnpublished=`11`
&redirectDeleted=`11`
&validate=`
provides:required
]]
Плагин на событие OnDocFormSave:<?php
if($resource->class_key == 'Ticket' && $modx->event->name == 'OnDocFormSave' && $modx->context->key != 'mgr'){
if(!empty($_POST['provides'])) {
$provides = implode('||',$_POST['provides']);
if (!$resource->setTVValue('provides', $_POST['provides'])) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'provides - ERROR');
}
} else {
if (!$resource->setTVValue('provides', '') ) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'provides - ERROR');
}
}
$modx->cacheManager->refresh();
}
И на итог: то форма не отправляется вообще, отправляется если только весь раздел валидации убрать. То отправляется, но в ТВ выбранные чекбоксы не записывает. Есть какие-то рабочие примеры, как в тиккете сделать чекбоксы?
Самый простой вариант сделать ещё одно поле и в него с помощью js записывать значения выбранных чекбоксов.
Разобрался с записью в тв, вписал в плагин вместо implode('||',$_POST['provides' prices, не знаю как, но знпсениеив тв передал ось.
Проблема в другом. Форма отправляется только если убрать абсолютно все аалидаторы в вызове ticketform. Убираешь валидацию для тв чекбокса не отправляет, Убираешь сам чекбокса в форме, все прекрасно работает. Чкдеса
Проблема в другом. Форма отправляется только если убрать абсолютно все аалидаторы в вызове ticketform. Убираешь валидацию для тв чекбокса не отправляет, Убираешь сам чекбокса в форме, все прекрасно работает. Чкдеса
Если форма не отправляется, должны быть ошибки.
В логах пусто, в браузера аналогично. Куда ещё тикетыорм может ошибки писать?
Попробуйте записать параметр &validate без символов новой строки.
[[!TicketForm?
...
&validate=`provides:required`
]]
так работает:
[[!TicketForm?
&allowedFields=`parent,name,gender,phone,email,location,age,hair-color,bust-size,
bust-type,height,ethnicity,smoker,nationality,weight,languages,provides,rates,video`
&tplFormCreate=`tickets.form.create.tpl`
&tplFormUpdate=`tickets.form.update.tpl`
&redirectUnpublished=`11`
&redirectDeleted=`11`
&validate=`provides:required`
]]
а так уже нет)
<code>
[[!TicketForm?
&allowedFields=`parent,name,gender,phone,email,location,age,hair-color,bust-size,
bust-type,height,ethnicity,smoker,nationality,weight,languages,provides,rates,video`
&tplFormCreate=`tickets.form.create.tpl`
&tplFormUpdate=`tickets.form.update.tpl`
&redirectUnpublished=`11`
&redirectDeleted=`11`
&validate=`
pagetitle:required,
gender:required,
phone:required,
location:required,
email:email:required,
age:required,
hair-color:required,
bust-size:required,
bust-type:required,
height:required,
ethnicity:required,
smoker:required,
nationality:required,
weight:required,
languages:required[],
provides:required,
content:required,
rates:required`
]]
</code>
методом проб понял, что форма не уходит из-за одной тв-шки: location:required.
В форме tickets.form.create.tpl ее вызов происходит таким образом:
В форме tickets.form.create.tpl ее вызов происходит таким образом:
<div class="col-md-6 col-sm-12">
<label for="ticket-sections">Location</label>
<select name="parent" class="form-control" id="ticket-sections">[[+sections]]</select>
<span class="error"></span>
</div>
По факту она выводит названия секций тикетов. Для тикетов валидация по-другому как-то должны быть получается?
Либо измените правило проверки на parent:required, либо измените имя select на <select name="location">.
спасибо, точно. Как вывести теперь чекбоксы из ТВ с возможностью изменения в tickets.form.update.tpl
<div class="checkbox">
<label>
<input type="checkbox" name="provides[]" value="[[+provides]]">
Outcall
</label>
<label>
<input type="checkbox" name="provides[]" value="[[+provides]]">
Incall
</label>
<span class="error">[[!+fi.error.provides]]</span>
</div>
так выводит просто значения, но не сами чекбоксы с галками
Возможно, вы можете использовать выходной фильтр FormItIsChecked из пакета FormIt.
<input type="checkbox" name="provides[]" value="Outcall" [[+provides:FormItIsChecked=`Outcall`]]>
пробовал, не выводит значения из тв. Пусто
Для нескольких значений, разделенных ||, вы должны написать свой собственный сниппет.
<?php
$output = ' ';
$input = explode('||', $input);
if (!empty($input) && is_array($input) && in_array($options,$input)) {
$output = ' checked="checked"';
}
return $output;
странная закономерность получается. Форма показывает сохраненные значения чекбокосов только для одного чекбокса. Если выбраны 2 — пустота
если применять этот снипет в таком формате:
<input type="hidden" name="provides" value="" />
<label><input type="checkbox" name="provides[]" value="Incall" [[!getTHEMchecks? &provides=`Incall`]] />Incall</label>
<label><input type="checkbox" name="provides[]" value="Outcall" [[!getTHEMchecks? &provides=`Outcall`]] />Outcall</label>
2 чекбокса постоянно нажаты, несмотря на то что в ТВ выбран один чекбокс
[[+provides:getTHEMchecks=`Incall`]] вместо [[!getTHEMchecks? &provides=`Incall`]]
опять же, если один чекбокс выбран — показывает нормально, если два выбрано в ТВ — не показывает ничего (чекбоксы все пустые)
Kаково содержание плейсхолдера [[+provides]]?
Incall||Outcall?
Kак вы храните значения в плагине?
Incall||Outcall?
Kак вы храните значения в плагине?
$provides = implode('||',$_POST['provides']);
$resource->setTVValue('provides', $provides)
ТВ параметры ввода: Outcall||Incall
ТВ параметры вывода: Разделитель
плагин:
ТВ параметры вывода: Разделитель
плагин:
<?php
if($resource->class_key == 'Ticket' && $modx->event->name == 'OnDocFormSave' && $modx->context->key != 'mgr'){
if(!empty($_POST['provides'])) {
$provides = implode('||',$_POST['provides']);
if (!$resource->setTVValue('provides', $_POST['procent'])) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'provides - ERROR');
}
} else {
if (!$resource->setTVValue('provides', '') ) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'provides - ERROR');
}
}
$modx->cacheManager->refresh();
}
Что такое $_POST['procent']?
if (!$resource->setTVValue('provides', $_POST['procent'])) {
...
взял с форума modx.pro/help/9684
Также задавался этим вопросом. Переменная нигде не объявлена, но с ней идет передача данных в ТВ при сохранении формы.
Также задавался этим вопросом. Переменная нигде не объявлена, но с ней идет передача данных в ТВ при сохранении формы.
По-моему $_POST['procent'] это опечатка.
Я бы использовал этот код в плагине:
ТВ параметры ввода:
Тип ввода = Список (множественный выбор)
Возможные значения = Outcall||Incall
ТВ параметры вывода:
Тип вывода = Разделитель
Разделитель = ||
Я бы использовал этот код в плагине:
$provides = implode('||',$_POST['provides']);
if (!$resource->setTVValue('provides', $provides)) {
...
ТВ параметры ввода:
Тип ввода = Список (множественный выбор)
Возможные значения = Outcall||Incall
ТВ параметры вывода:
Тип вывода = Разделитель
Разделитель = ||
секрет был в разделителе вывода) За procent также спасибо) заработал
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.