Размещение компонента веб-формы для системы Вопрос-Ответ (часть 5)

6617
0

В этой части статьи мы создадим страницу, на которой посетитель будет вводить в веб-форму вопрос, а так же в скрытом режиме обрабатывать некоторые результаты, которые необходимо занести в результат заполнения веб-формы.

Согласно разработанной в части 3 – Определение прав и структуры папок схеме веб- форма будет располагаться в папке /add_question/ в файле index.php. Абсолютный путь к ней будет выглядеть как

Размещение веб-формы Битрикс возможно как из административной части так и из публичной, то есть прямо со страницы сайта где мы планируем разместить форму. Воспользуемся вторым способом (из публичной части).

Входим под администратором или любым другим пользователем имеющем административные права, заходим на страницу /add_question/ и нажимаем кнопку редактировать страницу

Редактирование страницы веб-формы
Редактирование страницы веб-формы

Перетаскиваем компонент заполнение веб-формы на страницу

компонент заполнение веб-формы
компонент заполнение веб-формы
Код страницы веб-формы в режиме редактирования в Битриксе
Код страницы веб-формы в режиме редактирования в Битриксе

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

Параметры компонента выглядят следующим образом

параметры компонента заполнение веб-формы
параметры компонента заполнение веб-формы

На самом деле в файле index.php раздела contacts/qa/add_question/ содержится следующий код

Таким образом, при редактировании страницы Вы не видите кода подключающего header.php, config.php и footer.php. если не вставить в этот файл подключение config.php то строки

и

будут отрабатывать некорректно, поэтому необходимо внести в этот файл код подключения настроек config.php системы Вопрос-Ответ.

Входим под администратором или любым другим пользователем имеющем административные права, заходим на страницу /add_question/ и нажимаем кнопку редактировать страницу

Редактирование страницы веб-формы
Редактирование страницы веб-формы

successful_dispatch — это каталог в котором лежит файл index.php который показывается посетителю при успешной отправке сообщения.
Содержимое файла index.php в каталоге successful_dispatch следующее:

Напомню что у нас есть поле site_id в которое должен сохраняться идентификатор сайта с которого отправляется вопрос. Стандартными методами, то есть у меня по каким то причинам это не полуилось и поэтому я воспользовался предопределенными событиями веб-форм, а именно onBeforeResultAdd это событие вызывается перед сохранением результатов веб-формы и мы можем обрабатывать в нем отправленные из формы данные. Существуют и другие события веб-форм, например такие как:

onBeforeResultAdd — Вызывается перед добавлением нового результата веб-формы.
onAfterResultAdd — Вызывается после добавления нового результата веб-формы.
onBeforeResultUpdate — Вызывается перед сохранением изменений существующего результата.
onAfterResultUpdate — Вызывается после сохранения изменений результата веб-формы.
onBeforeResultDelete — Вызывается перед удалением результата веб-формы.
onBeforeResultStatusChange — Вызывается перед изменением статуса результата веб-формы.
onAfterResultStatusChange — Вызывается после изменения статуса результата веб-формы.

Чтобы использовать это событие, Вам необходимо создать файл init.php в каталоге bitrix/php_interface в котором прикрутить к событию пользовательскую функцию. Файл init.php у меня получился следующего содержания:

Значения полей веб-формы имеют вид в соответствии с указанным для них типом, например если вопрос имеет ответ типа text то поле формы будет иметь имя form_text_id, где id — это идентификатор значения ответа. Посмотреть идентификаторы можно в настройках веб-форм, как показано на скриншоте.

Идентификатор ответа для вопрос site_id
Идентификатор ответа для вопрос site_id

Таким образом, если посетитель корректно заполнил веб-форму, то перед добавление результата веб-формы в таблицу результатов у нас выполнится событие onBeforeResultAdd, в котором мы получаем идентификатор сайта с которого отправили вопрос и записываем его в скрытое поле site_id.

Кстати, после заполнения веб-формы, на указанный в в почтовом шаблоне адрес должно прийти сообщение о заполненной веб-форме с сылкой на страницу редактирования ответ, однако этой функционал этой страницы у нас пока не прописан.

В следующей статье мы будет писать интерфейс для редактора ответов, а именно создадим форму для редактирования ответа и код обновляющий таблицу результатов веб-форм.

Начало: Система «Вопрос-Ответ» на основе модуля «Веб-формы» CMS 1C-Bitrix»

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here