Можно. form api позволяет это сделать. вы можете на валидацию подвесить свой коллбэк и там опиисать свою логику и изменить $form_state. главное добавьте свой коллбэк в начало массива. при сильном желании вы можете и на сам элемент навесить свою валидацию
Можно. form api позволяет это сделать. вы можете на валидацию подвесить свой коллбэк и там опиисать свою логику и изменить $form_state.
Так как убрать то уже имеющуюся ошибку? Как ДОБАВИТЬ я понимаю - при некотором условии ставишь свой form_set_error и вот тебе новая ошибка. А как убрать СУЩЕСТВУЮЩУЮ? Она разве в form_state хранится?
"q2_faith" wrote:
главное добавьте свой коллбэк в начало массива
В начало какого массива?
"q2_faith" wrote:
при сильном желании вы можете и на сам элемент навесить свою валидацию
Ну так я навешиваю свою - старая то от этого никуда не девается. В этом и проблема.
в $form можно просто сделать поле не обязательным $form[какое-то_поле]['#required'] = false;
form_set_error указываются в $form['#validate']. Найдите в какой валидации нужная Вам ошибка
Это не вариант. Поле ДОЛЖНО БЫТЬ обязательным, но при некоторых условиях не выдавать ошибку.
Вы б объяснили, что именно за ошибка. Если в ряде случаев не должно выдавать ошибку при незаполненым обязательным полем, то прописать через хук "если (условие случая) поле не обязательное". Если условие не выполняется (не тот случай что нужно) - поле будет оставаться обязательным.
"remmor" wrote:
Тут не понял. Как удалить то выставленную ошибку?
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.
Это неважно. Нужно чтобы при нажатии одной кнопки обязательные поля не проверялись, а другой - работало как полагается, если кратко.
"Inj" wrote:
прописать через хук "если (условие случая) поле не обязательное". Если условие не выполняется (не тот случай что нужно) - поле будет оставаться обязательным.
Не катит. Проверка должна быть при отправке формы, а не при создании.
"Inj" wrote:
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.
Тоже не катит, почему выше описано. Форма должна работать как надо, лишь при некотором случае перестать давать ошибку
проще всего будет сделать поле таки необязательным и добавить свою проверку "если (поле пустое) И (не выполняется какое-то там условие) - form_set_error".
ну так удаляете нужную проверку "выдавать ошибку при незаполненном поле" и добавляете свою "выдавать ошибку при незаполненном поле если....".
Да, это крайний вариант, но по некоторым причинам нужно именно так, как описано выше.
"Inj" wrote:
проще всего будет сделать поле таки необязательным и добавить свою проверку "если (поле пустое) И (не выполняется какое-то там условие) - form_set_error".
Да, это решение в лоб, но очень не хотелось бы с ним корячиться. Звездочки самому на поля навешивать и прочее.
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.
Проблема в том, что к тому моменту как доходит дело до моей валидации - ошибки уже все выставлены. И сообщение выдается.
Комментарии
Можно. form api позволяет это сделать. вы можете на валидацию подвесить свой коллбэк и там опиисать свою логику и изменить $form_state. главное добавьте свой коллбэк в начало массива. при сильном желании вы можете и на сам элемент навесить свою валидацию
Так как убрать то уже имеющуюся ошибку? Как ДОБАВИТЬ я понимаю - при некотором условии ставишь свой form_set_error и вот тебе новая ошибка. А как убрать СУЩЕСТВУЮЩУЮ? Она разве в form_state хранится?
В начало какого массива?
Ну так я навешиваю свою - старая то от этого никуда не девается. В этом и проблема.
https://api.drupal.org/api/drupal/developer%21topics%21forms_api_referen... этого
в вашем коллбэке доступны как $form, так и $form_state.
Вы хотите сказать, что ошибка, выставляемая form_set_error хранится в $form_state или в $form ??
в $form можно просто сделать поле не обязательным $form[какое-то_поле]['#required'] = false;
form_set_error указываются в $form['#validate']. Найдите в какой валидации нужная Вам ошибка
врнее в $form['#validate'] указываются функции, которые уже выводят form_set_error
Это не вариант. Поле ДОЛЖНО БЫТЬ обязательным, но при некоторых условиях не выдавать ошибку.
Тут не понял. Как удалить то выставленную ошибку?
Вы б объяснили, что именно за ошибка. Если в ряде случаев не должно выдавать ошибку при незаполненым обязательным полем, то прописать через хук "если (условие случая) поле не обязательное". Если условие не выполняется (не тот случай что нужно) - поле будет оставаться обязательным.
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.
вы сделали, как я говорил?
Это неважно. Нужно чтобы при нажатии одной кнопки обязательные поля не проверялись, а другой - работало как полагается, если кратко.
Не катит. Проверка должна быть при отправке формы, а не при создании.
Тоже не катит, почему выше описано. Форма должна работать как надо, лишь при некотором случае перестать давать ошибку
почему не катит?)
ну так удаляете нужную проверку "выдавать ошибку при незаполненном поле" и добавляете свою "выдавать ошибку при незаполненном поле если....".
проще всего будет сделать поле таки необязательным и добавить свою проверку "если (поле пустое) И (не выполняется какое-то там условие) - form_set_error".
Да, это крайний вариант, но по некоторым причинам нужно именно так, как описано выше.
Да, это решение в лоб, но очень не хотелось бы с ним корячиться. Звездочки самому на поля навешивать и прочее.
Потому что такие условия задачи.
Проблема в том, что к тому моменту как доходит дело до моей валидации - ошибки уже все выставлены. И сообщение выдается.
а до Вашей валидации? выполните в Девеле dpm($form); и просмотрите весь список валидаций в форме и найдете ещё одну.
а вы пробовали? если дв, то приведите код
Нет там никаких валидаций, ибо валидация стандартная, по флагу '#required' => TRUE
Короче, проблема решена. Как выяснилось, есть функция form_clear_error, а сами ошибки(текст) в Сессии сидят