Обязательность поля "content" в Тикетах
Василий, вот столкнулся здесь…
В общем есть необходимость сделать поле «content» в тикетах не обязательным (не спрашивай зачем :-)).
И вот я не пойму — в методе тикета используется стандартный процессор resource/create, этот же процессор, как я понимаю, срабатывает и при создании докуменов из админки. Но вот из админки поле «контент» не обязательно, а с фронта — обязательно.
Почему так? Куда копать?
В общем есть необходимость сделать поле «content» в тикетах не обязательным (не спрашивай зачем :-)).
И вот я не пойму — в методе тикета используется стандартный процессор resource/create, этот же процессор, как я понимаю, срабатывает и при создании докуменов из админки. Но вот из админки поле «контент» не обязательно, а с фронта — обязательно.
Почему так? Куда копать?
Комментарии: 5
Тикет — это CRC, у него свой процессор, который вызывается стандартным. Проверка вот тут.
Можно просто сделать в форме скрытое поле content с любым символом — и будет работать.
Можно просто сделать в форме скрытое поле content с любым символом — и будет работать.
Ага, понял, спасибо!
А вот ещё такой момент:
Через форму создания надо сохранять и твшки, но некоторые tv-шки обязательны.
Поэтому я пошёл таким путём: создал копию сниппета TicketForm (чтобы при обновлении не слетело), понаписал в ней вот это:
Так нормально? По феншую? Или есть более джедайский путь?
А вот ещё такой момент:
Через форму создания надо сохранять и твшки, но некоторые tv-шки обязательны.
Поэтому я пошёл таким путём: создал копию сниппета TicketForm (чтобы при обновлении не слетело), понаписал в ней вот это:
/* ... */
$requiredTvs = (!empty($scriptProperties['requiredTvs'])) ? explode(',', $scriptProperties['requiredTvs']) : array();
/* ... */
case 'saveTicket':
case 'updateTicket':
$data = $_POST;
$good = true;
foreach($requiredTvs as $tv) {
if (!$data[$tv]) {
$data['error.'. $tv] = $modx->lexicon('field_required');
$good = false;
}
}
if ($good) {
$output = $Tickets->saveTicket($data);
} else {
$output = $Tickets->getTicketForm($data);
}
break;
/* ... */
А в плагине на OnDocFormSave уже без проверок сохраняю тв-шки.Так нормально? По феншую? Или есть более джедайский путь?
Да, нормально.
Можно через плагин на событие OnBeforeDocFormSave, но это сложнее и выгоды нет.
Можно через плагин на событие OnBeforeDocFormSave, но это сложнее и выгоды нет.
Да просто через плагин не понятно как показывать ошибки в форме, поэтому решил через сниппет.
Спасибо большое!
Спасибо большое!
А вот ещё непонятка одна…
Вот создал я тв-параметр, выставил ему требования, к примеру — «число», «минимальное значение» — 300, «разрешить десятичные» — да.
И вот почему-то я был уверен, что если сделать так:
И вот это уже реально пичалька, ибо если проверки есть только на уровне скриптов, то всю валидацию надо писать самому :-(
Вот создал я тв-параметр, выставил ему требования, к примеру — «число», «минимальное значение» — 300, «разрешить десятичные» — да.
И вот почему-то я был уверен, что если сделать так:
$result = $resource->setTVValue('tvname', 'swff');
, то в $result будет ошибка. А оказывается нифига этот метод никаких таких проверок не делает и всё спокойно сохраняет, и в $result всегда приходит true. Поля проверяются на уровне javascript по ходу… И вот это уже реально пичалька, ибо если проверки есть только на уровне скриптов, то всю валидацию надо писать самому :-(
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.