Подробное описание процесса создания формы Обратная связь
В этой статье подробно разберем как создавать форму на примере формы сбора обратной связи. Неавторизованный пользователь заполняет форму, данные сохраняются в базе, а также идет уведомление в телеграм пользователю.
Вот так выглядит форма:
Наши действия по шагам:
1. Создаем форму в /forms с кодом siteReview.
2. Создаем колонки формы с указанными настройками:
У нас 4 поля, 2 выбора radio, многострочное поле и строковое поле.
Для полей выбора (q1,q2) мы также прописываем процедуру списка значений:
CREATE PROCEDURE [dbo].[fm_siteReview_q1_dict]
@username nvarchar(256),
@itemID nvarchar(128)
AS
BEGIN
select 1 Text, 1 Value
union
select 2 Text, 2 Value
union
select 3 Text, 3 Value
union
select 4 Text, 4 Value
union
select 5 Text, 5 Value
END
и для q2:
CREATE PROCEDURE [dbo].[fm_siteReview_q2_dict]
@username nvarchar(256),
@itemID nvarchar(128)
AS
BEGIN
select 1 Text, 1 Value
union
select 2 Text, 2 Value
union
select 3 Text, 3 Value
union
select 4 Text, 4 Value
union
select 5 Text, 5 Value
END
В процедурах мы просто делаем список от 1 до 5. В поле text можно было бы использовать и строковые значения.
3. Прописываем процедуру GetItem для формы (она выполняется перед загрузкой формы и позволяет инициализировать настройки формы и поля)
CREATE PROCEDURE [dbo].[fm_siteReview_getItem]
@itemID int,
@username nvarchar(256)
AS
BEGIN
-- SELECT 1
select '' texp, '' contact, '{"maxlength": 500}' options_text
-- SELECT 2
select 1 LineLabel, 'h2' headerTag, 'Помогите нам пожалуйста улучшить платформу Falcon Space' Subtitle
END
В SELECT 1 указываются значения полей формы. Также мы здесь используем параметр options_ для настройки максимального количества символов в поле text.
В SELECT 2 задаются общие настройки формы: указываем что метки полей будут на отдельной строке, тег залоговка уменьшим до h2 и прописываем подпись к форме (здесь может быть любая разметка).
4. Прописываем пустую процедуру CheckItem - мы не используем здесь ее для проверок значений. Она должна возвращатть модель Result, Msg, поэтому делаем ее такой:
CREATE PROCEDURE [dbo].[fm_siteReview_checkItem]
@username nvarchar(256),
@itemID int,
@parameters ExtendedDictionaryParameter readonly
AS
BEGIN
select 1 Result, '' Msg
END
5. Прописываем процедуру для обработки кнопки Отправить.
CREATE PROCEDURE [dbo].[fm_siteReview_saveItem]
@username nvarchar(256),
@itemID int,
@parameters ExtendedDictionaryParameter READONLY
AS
BEGIN
declare @formID int = (select id from as_forms where lower(code)='sitereview')
declare @q1 nvarchar(max) = (select title from as_formCols where formID = @formID and code='q1' )
declare @q2 nvarchar(max) = (select title from as_formCols where formID = @formID and code='q2' )
declare @ip nvarchar(max)
select @ip = Value2 from @parameters where [key]='userIP'
if(exists(select id from as_trace where code='siteReview' and ip = @ip and created > dateadd(minute, -2, getdate()) )) begin
select 0 Result, 'Слишком частая отправка ' Msg
return
end
declare @pq1 nvarchar(max)
select @pq1 = Value2 from @parameters where [key]='q1'
declare @pq2 nvarchar(max)
select @pq2 = Value2 from @parameters where [key]='q2'
declare @ptext nvarchar(max)
select @ptext = Value2 from @parameters where [key]='text'
declare @pcontact nvarchar(max)
select @pcontact = Value2 from @parameters where [key]='contact'
declare @s nvarchar(max) = @q1 + ':' + isnull(@pq1, '') + ',
' + @q2 + ':' + isnull(@pq2, '') + ',
Контакт - ' + isnull(@pcontact, '--')
insert into as_trace (code, header, text, created, itemID, username, ip)
values('siteReview', @s, @ptext, getdate(), 0, @username, @ip)
-- SELECT 1
select 1 Result, 'Спасибо за ваше мнение!' Msg, '' SuccessUrl, 1 HideFormAfterSubmit, '' RefreshContainer, 1 EnableSaveAlert
-- SELECT 2 Вызов внешнего действия
select 'notification' type, 'Обратная связь: ' + @s text , 'user1' [to], 'common' typeCode, char(10) + 'Комментарий: ' + @ptext url, '' additional -- notification
END
Что происходит в процедуре:
1. Мы получаем из метаданных формы поля q1 и q2 - какие были вопросы заданы (чтобы в случае их изменения они изменились и здесь, т.е. не пишем их тут отдельно, а извлекаем).
2. Извлекаем IP пользователя для того, чтобы сделать проверку того, что данный IP не слишком часто отправляет запрос (смотрим его последнее сохранение и если не прошло 2 минуты, то отказываем ему).
3. Далее извлекаем значения полей из коллекции @parameters (Key - это код поля, а Value2 содержит значение).
4. Сохраняем данные в trace c кодом siteReview.
5. SELECT 1 выдает сообщение об успехе операции, а также задает через 1 EnableSaveAlert, что сообщение должно выдаваться через alert справа наверху. Если нам надо обновить какую-то часть страницы, то можно указать jquery селектор в RefreshContainer (если это вся страница, то 'body').
6. Отправляем уведомление пользователю user1.
Чтобы это работало, в таблице as_nt_notificationTypes должен быть добавлен код уведомления (в нашем случае это common).Чтобы приходили уведомления пользователю в телеграм должны быть выполнены следующие моменты:
- к сайту подцеплен телеграм бот (прописан токен в appsettings)
- пользователь имеет привязку логина к боту (он указывает логин телеграма в профиле на сайте, а затем обращается к боту с любоой командой - в этот момент создается привязка пользователя к боту).
7. Добавим в быстрые действия нашу форму. В Быстрые действия / GetLayout в SELECT 3 добавляем нашу форму:
select 'form' type,'Обратная связь, отзыв' Title, 'siteReview' Code, '0' itemID,
' fa-comment' Icon, 'Отправить' btnText, 0 bigModal, 1 slideout, 0 Ord, 1 FloatPanel
Здесь мы задаем вывод ссылки на модальную форму с кодом siteReview с кнопкой Отправить, которая откроется в малом модальном окне (0 bigModal). FloatPanel задает что эта кнопка будет всегда видна справа на плавающей панели.
Google поиск по нашей документации
- Руководства Введение в веб-платформу Falcon Space. C чего начать? Мануал для начинающего разработчика Falcon Space Видео о создании личных кабинетов на сайте - веб-платформе Falcon Space Пример создания системы по учету Кадры (HR) на сайте Вопросы и ответы для тех, кто начал разрабатывать на Falcon Space Как создать таблицу на сайте по шагам Как создать форму на сайте по шагам Как создать дашборд в личном кабинете пользователя Как сделать локализацию сайта для нетехнического специалиста Как отслеживать историю действий пользователя или историю событий по объекту системы Создание страниц с компонентом таблица/форма с автогенерацией необходимых SQL процедур Как сделать отслеживание посещений сайта конкретными людьми? Как сделать аналитический отчет или таблицу на сайте Как сделать функционал оценки полезности материала Подробное описание процесса создания формы Обратная связь Создание из под editor структуры личных кабинетов (роли, страницы) Улучшение адаптации страниц под мобильные устройства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта