Административная часть, ввод ответа редактором в системе Вопрос-Ответ на 1С Bitrix. (часть 6)

4069
1

Пришло время написать форму для редактора и администратора, которые смогут вводить ответы на заданные посетителями вопросы. Начнем это делать с создания в разделе /contacts/qa/admin/ (у Вас возможно другой) индексного файла index.php. Будем действовать по следущему сценарию:

  1. Создаем форму отправки
  2. Определяем метод REQUEST_METHOD из глобальной переменной $_SERVER

Если метод GET

В зависимости от этого метода выполняем различный код. Если метод GET то скорее всего на страницу зашли по ссылке администрирования ответа и одной из передаваемых переменных будет RESULT_ID то есть идентификатор результата веб-формы Битрикс. Но в любом случаем необходимо проверить существование этого результата и только после этого приступать к его выводу на экран. Так же, одним из параметров метода GET  может быть переменная ACTION с помощью которой мы сможем удалить неугодный результат веб-форм.

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

Приступим!

Пишем админку для редактора в системе «Вопрос-Ответ»

Для начала проверьте, что у Вас отображается при входе на страницу /contacts/qa/admin/ под обычным посетителем(не авторизованным пользователем). Должна появляться форма авторизации как на скриншоте. Если этого не происходит, то настройте правильно доступ к данному разделу через административную панель битрикса.
Страница авторизации
Страница авторизации

Если Вы уже в тестовом режиме заполняли форму для посетителя, то на указанный в почтовом шаблоне адрес должно было прийти письмо со ссылкой на редактирование ответа результата веб-формы, а именно:

Таким образом, в на страницу index.php будет передан RESULT_ID (идентификатор результата заполнения веб-формы), причем он будет передан методом GET, однако при переходе по этой ссылке изначально должно открыться окно авторизации с кнопкой Войти, а форма при нажатии будет осуществлять передачу значений в ядро битрикс методом POST, а ссылка останется прежнего вида значит необходимо переопределить метод POST на метод GET, в коде я это прокомментирую.

Теперь создадим простую форму с одним полем вида TEXTAREA, скрытым полем с идентификатором результата заполнения веб-формы и кнопкой Отправить. Код формы будет выглядеть следующим образом:

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

Форма для ввода ответов на вопросы
Форма для ввода ответов на вопросы
Вот так выглядит готовая форма для ввода ответов. Не стоит пугаться интерфейса похожего на word. Все это сделал WYSIWYG редактор, который подключается буквально тремя строчками кода в шаблоне.

В качестве WYSIWYG редактора я использовал TinyMCE. Установка его очень проста. Необходимо в файлах шаблона(лежит в bitrix/templates/ваш шабло/), там где формируется head страницы я добавил следующий код:

ВСЕ! Больше ничего для работы WYSIWYG редактора не надо. не страшно, правда ли, зато теперь мы сможем писать ответы с красивым оформлением, используя весь арсенал форматирования HTML.
А теперь самое интересное — код который выполняет при открытии страницы админки и после нажатия кнопки отправить. Код постараюсь в меру подробно комментировать.

Вот и все. система готова к испытаниям и использованию. Надеюсь статьи оказались полезны для Вас. Если возникнут вопросы, с радостью отвечу на них. Желаю удачи.

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

1 КОММЕНТАРИЙ

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

Please enter your comment!
Please enter your name here