Контакты

Поиск по сайту

Категория: Chronoforms5 Опубликовано: 17 Январь 2017

В последних версиях компонента Chronoforms, начиная с версии 5.0.10, уже появилась возможность выбрать локализацию для сообщений валидатора. Среди вариантов русский язык так же присутствует. Но, это, к сожалению, не означает, что кириллица пройдет всегда и везде. Что-то приходится подправлять. В частности, те, кто использует в своих формах в качестве антиспама проверочный вопрос, могут столкнуться с проблемой валидации при отправке сообщений, если вопросы и ответы представляют собой предложения/фразы на кириллице. При использовании латиницы или цифр никаких трудностей, как правило, не возникает и форма успешно отправляется, если ответ пользователя верный.

Первоначально, устраняя эту проблему, необходимо убедиться в том, что форма не кэшируется. Не смотря на то, что в нашем распоряжении есть плагин, позволяющий располагать формы где угодно на странице, сами разработчики рекомендуют использовать его с осторожностью. Если форма размещена в теле кэшируемой страницы, то и она сама со всеми своими установками (в том числе и блоки антиспама) так же кэшируется. Поэтому, если нет возможности отключить кэширование страницы, то форму лучше выводить в модуле, или же в качестве отдельной страницы (тип пункта меню «Форма Chronoforms»).

Итак, если форма не кэшируется, но сообщение валидатора «Вы неправильно ответили на вопрос» никуда не делось и отправка не получается, приступаем к устранению проблемы.

Нам нужны два файла:

  1. www/administrator/components/com_chronoforms5/chronoforms/actions/load_security_question/load_security_question.php
  2. 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;

Сохраняем. Закрываем. Проверяем. Теперь правильные ответы должны пройти валидацию, независимо от того, в каком регистре их вводит пользователь.

P.S.:

Создавая список проверочных вопросов и ответов, так же не помешает убедиться в том, что в конце отсутствуют пустые строки. Если в списке будут пустые строки, то форма будет выбрасывать пустые вопросы случайным образом, так же, как и любые другие. Разумеется, в этом случае, она валидацию не пройдет.

Добавить сообщение

Форма входа

Индекс цитирования Яндекс.Метрика