Веб-мастера, применяющие проверочный вопрос в качестве антиспама в компоненте Chronoforms, иногда сталкиваются при отправке формы с проблемой валидации, если вопросы и ответы показаны фразами на кириллице. Стоит отметить, что при латинице или цифрах трудности не появляются и форма благополучно отправляется.
Решение проблем с валидацией
На этом сайте есть множество информации про компонент Chronoforms, в том числе предлагает способ решения проблемы с валидацией проверочного вопроса на кириллице.
Без предварительных правок соответствующих файлов компонента, где обрисованы функции для элементов «Check Security Question» и «Load Security Question», в парах кириллица «вопрос-ответ» не поддерживается.
Чтобы устранить данную проблему, первоначально стоит убедиться, что эта форма не кэшируется. Хотя у нас в распоряжении имеется плагин, который дает возможность на странице располагать формы где хочется, непосредственно разработчики советуют применять его достаточно осторожно. Когда форма расположена в теле кэшируемой страницы, тогда она своими всеми установками (также и блоки антиспама) кэшируется тоже. Значит, если невозможно выключить кэширование страницы, тогда форму выводят в модуль, либо как отдельную страницу.
Следовательно, если не кэшируется форма, но при этом сообщение валидатора не пропало и не получается отправка, следует приступить к ликвидацию проблемы.
Возьмем два файла:
- www/administrator/components/com_chronoforms5/chronoforms/actions/load_security_question/load_security_question.php
- www/administrator/components/com_chronoforms5/chronoforms/actions/check_security_question/check_security_question.php
Теперь в файле load_security_question.php находим: $answers[$k] = strtolower($answer) и заменяем на:
$answ = json_decode (json_encode($answer));
$answers[$k] = mb_strtolower($answ);
Далее в файле check_security_question.php находим строку:
$chrono_security_answer = strtolower(trim($form->data[‘chrono_security_answer’])) заменяем на:$secquest = json_decode (json_encode( trim($form->data[‘chrono_security_answer’]) ) );
$secquest = mb_strtolower($secquest);
$chrono_security_answer = $secquest;
Далее необходимо: Сохранить – Закрыть – Проверить. После этого правильные ответы пройдут валидацию, при этом не имеет значения, в каком регистре пользователь их вводит.
Формируя список вопросов и ответов, не будет лишним удостовериться, что пустые строки отсутствуют. Когда в списке будут присутствовать пустые строки, тогда форма выбросит случайно пустые вопросы. Безусловно, в этом эпизоде, она не пройдет валидацию.
Оставить ответ