Группа чекбоков в форме
        Создаю ТВ типа чекбокс, ставлю значение 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 также спасибо) заработал            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.