ПафНутиЙ-Блог » Модули » UniForm — модуль универсальных ajax-форм для DataLife Engine

UniForm — модуль универсальных ajax-форм для DataLife Engine

10.05
545
20874
UniForm — модуль универсальных ajax-форм для DataLife Engine

Не подходит стандартная форма обратной связи? Нужна возможность использовать свои поля? Нужна защита от ботов и лёгкая настройка без использования БД? Тогда этот модуль для Вас!

Преимущества


  • Не использует БД. Для работы модуля не требуется дополнительное соединение с БД и он не хранит данные из форм.
  • Скорость работы. За счёт простоты реализации удалось достичь приемлемой скорости работы.
  • Лёгкость настройки и стилизации. Все настройки модуля, оформление email-сообщения и самой формы вынесены в файлы шаблона, а это значит, что вы можете кастомизировать внешний вид не только формы, но и email-сообщения так, как этого требует дизайн.
  • AJAX вызов и отправка форм. Это даёт максимальную защиту от автоматических заполнений и не обременяет пользователя разгадкой каптчи.


Требования к установке


  • Версия DLE: 10.2 и выше.
  • PHP 5.4 и выше.
  • Прямые руки.


Установка


  • Скачать актуальную версию модуля
  • Распаковать содержимое папки DLE-UniForm-X.X.X (X.X.X - номер актуальной версии модуля) в корень сайта.
  • В браузере запустить установку модуля по адресу: ваш_сайт/dle_module_install.php?module=uniform
  • Следовать инструкциям


Скриншоты форм, поставляемых в комплекте с модулем



Форма обратной связи
UniForm — модуль универсальных ajax-форм для DataLife Engine


Форма обратной связи, с ошибками
UniForm — модуль универсальных ajax-форм для DataLife Engine


Сообщение об успешной отправке сообщения из формы обратной связи
UniForm — модуль универсальных ajax-форм для DataLife Engine


Форма заказа звонка
UniForm — модуль универсальных ajax-форм для DataLife Engine


Форма заказа звонка, в процессе отправки
UniForm — модуль универсальных ajax-форм для DataLife Engine


Email, с заказом звонка
UniForm — модуль универсальных ajax-форм для DataLife Engine


Тестовая форма с примером обработки результатов отправки формы
UniForm — модуль универсальных ajax-форм для DataLife Engine


Настройка


  • Описание и примеры конфигурации вызова модуля можно найти в файлах, с именем config.tpl.
  • Описание и примеры параметров формы можно найти в файле {THEME}/uniform/test/form.tpl.
  • Описание и примеры параметров email-сообщения можно найти в файле {THEME}/uniform/callback/email.tpl.


Параметры, доступные в файле конфигурации (config.tpl):


  • templateFolder — Папка с шаблонами формы формы. Указывается подпапка, в папке uniform текущего шаблона сайта, в которой должны лежать файлы config.tpl, form.tpl и email.tpl. Например шаблон формы обратной связи (feedback) выглядит так:
    {THEME}/uniform/
    └── feedback/ 
        ├── config.tpl - файл конфига
        ├── email.tpl - файл email-сообщения
        └── form.tpl - файл вывода формы

  • nocache — Отключение кеширования модуля.
  • debug — Дебаг. Выводится распечатка конфига, массива данных, переданных через $_POST и массива данных, отправляемых на email.
  • required — Обязательные поля. Указываются имена полей, обязательных для заполнения.
  • hidden — Разрешенные скрытые поля. Такие поля передаются из атрибута data-uf-settings кнопки открытия формы. Например, если к кнопке открытия формы прописать
    data-uf-settings='{"formConfig": "feedback", "fields":{"field1": "value1", "field2": "value2", "field3": "value3"}}'
    и при этом в конфиге будет вот такая запись:
    hidden = field1,field3
    то поле field2 не будет выведено в форму. Это сделано для безопасности работы модуля.
  • sendmail — Отправлять email при заполнения формы?
  • emails — Адреса почты, на которые необходимо отправлять уведомление. Необходимо прописать один или несколько email-адресов, через запятую.
  • selectFields — Поля типа select. Необходимо перечислить через запятую имена всех полей, являющихся селектами.
  • checkboxFields — Поля типа checkbox. Необходимо перечислить через запятую имена всех полей, являющихся чекбоксами.
  • radioFields — Поля типа radio. Необходимо перечислить через запятую имена всех полей, являющихся радиокнопками.
  • sendAsPlain — Отправлять сообщение как простой текст.
  • sendToAuthor — Отправить письмо автору новости, если есть newsId (есть поле с name="newsId") и если автор разрешил получение писем с сайта.
  • sendToSender — Отправлять письмо так же на email, указанный в поле email.
  • allowAttachments — Разрешить прикрепление файлов.
  • maxFileSize — Максимальный размер загружаемого файла (в килобайтах).
  • allowedFileTypes — Разрешенные типы файлов, перечисляем расширения через запятую, без точек и пробелов.


Теги шаблонов


Список тегов, поддерживаемых в шаблоне form.tpl.
Вместо X следует прописывать имя инпута, селекта, чекбокса или радиокнопки. Имена не должны дублироваться.
  • {* текст *} — Служебный комментарий. Текст, заключенный в такие теги, не будет выведен в браузер.
  • [error]текст[/error] — выводит текст, если форма содержит ошибки заполнения.
  • [success]текст[/success] — выводит текст, если форма удачно отправлена.
  • [form]текст[/form] — выводит текст, если форма только что открыта, или отправлена с ошибками.
  • [debug]{debug}[/debug] — выводит дебаг.
  • [uf_token_error]текст[/uf_token_error] — выводит текст, если происходит попытка межсайтовой подделки запроса (CSRF Attack) или если конфиг формы изменился во время заполнения формы.
  • [uf_email_error]текст[/uf_email_error] — выводит текст, если поле имеет имя email, является обязательным и не проходит валидацию (наличие символа @ и точки).
  • [uf_default_value]текст[/uf_default_value] — выводит текст, если форма открыта впервые.
  • {uf_filed_X} — выводит данные, переданные в форму из текстовых полей в случаи ошибочного заполнения.
  • [uf_field_X="Y"]текст[/uf_field_X] — Выводит текст, если в текстовое поле X передано значение Y.
  • [uf_error_X]текст[/uf_error_X] — выводит текст, если текстовое поле содержит ошибку.
  • [uf_select_X="Y"]текст[/uf_select_X] — Выводит текст, если в селекте X отмечен пункт со значением Y.
  • [uf_select_X_Y]selected[/uf_select_X_Y] — Выводит текст, если в селекте X отмечен пункт со значением Y. Является вариацией предыдущего тега.
  • [uf_checkbox_X="Y"]текст[/uf_checkbox_X] — Выводит текст, если отмечен чекбокс с именем X, содержащий значение Y.
  • [uf_checkbox_X_Y]checked[/uf_checkbox_X_Y] — Выводит текст, если отмечен чекбокс с именем X, содержащий значение Y. Является вариацией предыдущего тега.
  • [uf_radio_X="Y"]текст[/uf_radio_X] — Выводит текст, если отмечена радиокнопка с именем X, содержащая значение Y.
  • [uf_radio_X_Y]checked[/uf_radio_X_Y] — Выводит текст, если отмечена радиокнопка с именем X, содержащая значение Y. Является вариацией предыдущего тега.


Список тегов, поддерживаемых в шаблоне email.tpl.
Вместо X следует прописывать имя инпута, селекта, чекбокса или радиокнопки. Имена не должны дублироваться.
  • {* текст *} — Служебный комментарий. Текст, заключенный в такие теги, не будет выведен в сообщении.
  • [header]текст[/header] — Тема письма.
  • {all_mail_fields} — выводит все поля, переданные из формы в удобном, для последующей вставке в шаблон, виде.
  • [uf_field_X]текст[/uf_field_X] — выводит текст, если текстовое пол X заполнено.
  • {X} — выводит данные, переданные в форму из текстового поля X.
  • [not_X]текст[/not_X] — Выводит текст, если в текстовое поле X пустое.
  • [uf_field_X="Y"]текст[/uf_field_X] — Выводит текст, если в текстовое поле X передано значение Y.
  • [uf_select_X="Y"]текст[/uf_select_X] — Выводит текст, если в селекте X отмечен пункт со значением Y.
  • [uf_checkbox_X="Y"]текст[/uf_checkbox_X] — Выводит текст, если отмечен чекбокс с именем X, содержащий значение Y.
  • [uf_radio_X="Y"]текст[/uf_radio_X] — Выводит текст, если отмечена радиокнопка с именем X, содержащая значение Y.
  • {send_date} — выводит дату отправки сообщения из формы, отформатированную в соответсвии с настройками DLE.
  • {current_page} — выводит URL страницы, с которой было отправлено сообщение.
  • [news_id]{news_id}[/news_id] — ID новости (если есть поле с name="newsId").
  • [news_autor]{news_autor}[/news_autor] — Логин автора новости (если есть поле с name="newsId").
  • [news_title]{news_title}[/news_title] — Заголовок новости (если есть поле с name="newsId").
  • [news_email]{news_email}[/news_email] — Email автора новости (если есть поле с name="newsId").
  • {site_home_title} — Выводит название сайта из настроек DLE.
  • {site_http_home_url} — Выводит адрес сайта из настроек DLE.
  • {site_short_title} — Выводит краткое название сайта из настроек DLE.
  • [user_name]{user_name}[/user_name] — Выводит логин пользователя, отправившего сообщение.
  • [user_fullname]{user_fullname}[/user_fullname] — Выводит полное имя пользователя, отправившего сообщение.
  • [user_email]{user_email}[/user_email] — Выводит email пользователя, отправившего сообщение.
  • [user_foto]{user_foto}[/user_foto] — Выводит ссылку на аватар пользователя, отправившего сообщение.
  • [user_land]{user_land}[/user_land] — Выводит то, что пользователь, отправивший сообщение, написал в поле "Место жительства".
  • [to_sender] текст [/to_sender] — Выводит текст для отправителя, если указан параметр sendToSender
  • [not_to_sender] текст [/not_to_sender] — Выводит текст для получателей псьма, отличных от отправителя, если указан параметр sendToSender


Добавлено в v1.2



Улучшения и исправления

  • Теперь если в форме есть заполненное поле с `name="header"`, такое поле будет автоматически подставлено в тему письма.
  • Исправлена ошибка на DLE 10.5+ с невозможностью указать email отправителя из формы.
  • Исправлена ошибка с экранированием кавычек в письме.
  • Если пользователь авторизован, то тег {uf_field_email} при открытии формы автоматически заменится на его email.
  • Убран тег {send_date=D.m.Y} т.к. он оказался нерабочим.
  • Исправлено некорректное поведение тега {send_date}.
  • Добавлен новый параметр конфигурации sendAsPlain — Отправлять сообщение как простой текст. Теперь можно отправлять письма как простые текстовые сообщения, без обработки html.
  • Добавлен новый параметр конфигурации sendToAuthor — Отправить письмо автору новости, если есть поле с name="newsId" и если автор разрешил получение писем с сайта.
  • Реализована возможность отправлять в письме данные из новости. Для этого необходимо передать в форму поле newsId. Пример шаблона в папке newsauthor.
  • Реализована возможность отправки сообщения на email автора новости. Для этого необходимо передать в форму поле newsId и в конфиге прописать sendToAuthor = y. Пример шаблона в папке newsauthor.


Новые теги для email-сообщений

  • [news_id]{news_id}[/news_id] — ID новости (если есть поле с name="newsId").
  • [news_autor]{news_autor}[/news_autor] — Логин автора новости (если есть поле с name="newsId").
  • [news_title]{news_title}[/news_title] — Заголовок новости (если есть поле с name="newsId").
  • [news_email]{news_email}[/news_email] — Email автора новости (если есть поле с name="newsId").
  • {site_home_title} — Выводит название сайта из настроек DLE.
  • {site_http_home_url} — Выводит адрес сайта из настроек DLE.
  • {site_short_title} — Выводит краткое название сайта из настроек DLE.
  • [user_name]{user_name}[/user_name] — Выводит логин пользователя, отправившего сообщение.
  • [user_fullname]{user_fullname}[/user_fullname] — Выводит полное имя пользователя, отправившего сообщение.
  • [user_email]{user_email}[/user_email] — Выводит email пользователя, отправившего сообщение.
  • [user_foto]{user_foto}[/user_foto] — Выводит ссылку на аватар пользователя, отправившего сообщение.
  • [user_land]{user_land}[/user_land] — Выводит то, что пользователь, отправивший сообщение, написал в поле "Место жительства".



Добавлено в v1.3


  • Новый, удобный установщик модуля.
  • Добавлена возможность пикреплять файлы к сообщению в форме. Для этого необходимо в конфиге указать параметр allowAttachments, а так же параметры maxFileSize (максимальный размер прикрепляемого файла) и allowedFileTypes (доступные типы файлов) при необходимости. Готовый шаблон для прикрепления файлов к сообщению — attachments.
  • Добавлен новый параметр конфигурации sendToSender. Если этот параметр задан, то письмо будет отправлено на email-адрес, указанный в поле email. Так же проверяется валидность этого адреса.
  • В шаблон email-сообщения добавлены новые теги, обрабатываемые в сообщении и в поле заголовке письма, когда активирован параметр sendToSender.
    [to_sender] текст для отправителя [/to_sender]
    [not_to_sender] текст для других получателей [/not_to_sender]
  • Добавлены почти все поля из профиля пользователя в шаблон email.
  • Добавлен вывод допполей из профиля пользователя в шаблон email.
  • Ко всем тегам в шаблонах email-сообщения добавлены противоположные теги [not_X], выводящие текст между ними, когда соответствующий тег {X} пуст.
  • Исправлена ошибка, когда пользователю разрешено менять шаблон сайта, а шаблон формы берётся из шаблона, установленного по умолчанию в системе.
  • Улучшения и оптимизация кода.
  • Теперь минимально-допустимая версия php - 5.4.



Для вывода формы непосредственно на странице достаточно прописать в нужном месте шаблона (начиная с версии 1.1):
<div data-uf-inline="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "inline"}'>
	<div class="uf-inline-loading"></div>
</div>


Для Отправки сообщения автору новости необходимо прописать в шаблон краткой или полной новости (начиная с версии 1.2):
<span class="uf-btn" data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "newsauthor", "fields": {"newsId": "{news-id}"}}'>Связь с автором новости</span>



Скачать модуль UniForm


Жду ваших отзывов!
Обновлено: 27 ноября 2016
(Модуль обновлён до версии 1.3)

Похожие материалы

  • EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine
  • Easy Like - модуль организации системы лайков новостей для DLE 9.x - 10.x (обновлено до 1.4)
  • Block.Pro.2.5
  • Yandex Maps - модуль Яндекс карт для DLE (только UTF-8 версия, обновлено до 1.4.1)
Закрыть

Комментировать могут только зарегистрированные пользователи

+

Комментарии

ПафНутиЙ
ПафНутиЙ 11 сентября 2015 19:44
Ответов: 0 #5102
Модуль учитывает настройки DLE.
Romka
Romka 15 сентября 2015 10:37
Ответов: 3 #5108
Прописал почту в файлике конфиг, раскомментировал. Но сообщение не приходит на указанную мной почту.
В чём может быть причина. Движок 10.2.

Может надо права 777 выставлять ещё?

Просто не могу понять в чём может быть проблема.
ПафНутиЙ
ПафНутиЙ 15 сентября 2015 13:33
Ответов: 2 #5112
посмотрите логи, включите отладку, проверьте спам.
Romka
Romka 15 сентября 2015 17:04
Ответов: 1 #5116
Спасибо, сбросил кеш, помогло.

Такой вопрос, а как сделать, чтобы форма работала не по нажатию а была активной (как у вас на сайте в самом низу).

Спасибо.
dyv
dyv 17 сентября 2015 12:58
Ответов: 0 #5119
Romka, в опиcании про это напиcано.
шаблон inline
;)
DimaTiunov
DimaTiunov 15 сентября 2015 15:59
Ответов: 1 #5115
ПафНутиЙ,
Слушай, а можно по удачному завершению всей формы сделать выполнение скрипта? Простой импут будет работать?
DimaTiunov
DimaTiunov 15 сентября 2015 18:03
Ответов: 0 #5117
Покопался и всё уже сам намутил. Спасибо за хороший код, всё понятнее не куда)
souz21
souz21 17 сентября 2015 12:44
Ответов: 2 #5118
При попытке отправить, выходит сообщение:

Использовал стандартный шаблон
ПафНутиЙ
ПафНутиЙ 17 сентября 2015 16:21
Ответов: 1 #5120
Несколько раз уже отвечал на подобный вопрос.
Посмотрите комментарии.
souz21
souz21 17 сентября 2015 17:18
Ответов: 0 #5121
Нашел только это:
ПафНутиЙ,
Цитата: ПафНутиЙ
Такая ошибка происходит когда токен, отправляемый из формы не соответсвует токену, рассчитываемому модулем.
Токен формируется из конфига модуля, текущего шаблона сайта и сессии пользователя.
Возможно у вас сбрасывается сессия, или вы пытаетесь отправить форму с другого сайта.


-Если честно, не понял о чем речь идет. Я когда первый раз установил первую версию на dle 10.3, сразу все заработало. Сейчас скачал версию 1.1, установил на 10.5, и вот такая вот ошибка выходит.
chrome
chrome 18 сентября 2015 17:21
Ответов: 0 #5124
Извиняюсь, проблему решил. Спасибо за модуль!
chrome
chrome 18 сентября 2015 22:14
Ответов: 7 #5125
Хочу сделать, чтобы пользователь сам указывал тему письма. В форме вывожу поле "Тема письма", прописываю его в email.tpl таким образом:
[header]{field2}[/header]

Но когда приходит сообщение, то в списке сообщений тема остается в таком виде {field2}. Можно как-то сделать, чтобы данное поле обрабатывалось в теге [head][/head] ?
И еще не приходит дата, вместо нее пустота. Видел комментарий от пользователя. Не решили вы с ним данную проблему?
ПафНутиЙ
ПафНутиЙ 18 сентября 2015 22:31
Ответов: 6 #5126
По поводу тегов в head напишите тиккет, возьму в работу.
По дате в email нужно смотреть на сайте, но пока на это времени нет.
DimaTiunov
DimaTiunov 20 сентября 2015 20:20
Ответов: 5 #5131
Я вот тут делал свои надстройка над модулем, и заметил что нет типа полей range, или по проще ползунка. Можно использовать конечно его как другой вид полей, типа радио или чекбокс ибо функционал почти тот же, но как то смотрится не очень)))
ПафНутиЙ
ПафНутиЙ 20 сентября 2015 20:28
Ответов: 4 #5132
Что мешает добавить?
DimaTiunov
DimaTiunov 21 сентября 2015 14:26
Ответов: 3 #5135
Так я то добавил, а тем кому в будующем будет нужно это придётся тоже это делать)
ПафНутиЙ
ПафНутиЙ 21 сентября 2015 18:34
Ответов: 2 #5140
Что мешает сделать pull request?
DimaTiunov
DimaTiunov 21 сентября 2015 23:19
Ответов: 0 #5141
Я не когда с гитхабом не работал и не знаю что да как там, да и код мой получается кустарным+я юзаю формы для оплаты, и там много лишнего)
DimaTiunov
DimaTiunov 22 сентября 2015 05:26
Ответов: 0 #5142
Ты вот мне лучше скажи, как сделать обязательным поле не являющиеся текстовым? Я пробовал вставить проверку на существование массива в проверку условий, но они как пропускались так и пропускаются(
-- upd --
нашёл небольшой костыль, есть такой агрумент у инпутов как required он проверяет его до отправки, и по сути подойдёт для radio или подобных полей с одним выбором из множества.
wxd
wxd 30 сентября 2015 10:11
Ответов: 1 #5156
Автор, выражаю огромную благодарность за модуль! работает везде. даже на тупом осле.

Возник вопрос по допиливанию.

В настройке у вас сказано:

"Далее в нужном шаблоне, в нужном месте вставить кнопку вызова ajax-окна формы:

Этот код выводит вашу кнопку. А как под мою уже существующую кнопку из двух сменяющихся картинок вывести вызов вашей формы? что-то вроде a href="#" class="нужный класс из вашего скрипта,но без появления кнопки[/code]
ПафНутиЙ
ПафНутиЙ 30 сентября 2015 10:27
Ответов: 0 #5157
Просто добавьте к своей кнопке эти атрибуты:
data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "feedback"}'
ПафНутиЙ
ПафНутиЙ 30 сентября 2015 12:01
Ответов: 0 #5159
А какие здесь ошибки? Вроде скобочки и запятые все правильно. Подскажите пожалуйста. Тоже виснет и не отправляет

Без понятия. Смотрите в консоль, думаю там всё написано.
vegarus
vegarus 12 октября 2015 00:50
Ответов: 1 #5183
Здравствуйте! Я подключил все как написано у вас на сайте описание, но почему-то я нажимаю на кнопку и не выскакивает AJAX-окно
ПафНутиЙ
ПафНутиЙ 12 октября 2015 08:14
Ответов: 0 #5184
Адрес сайта?
michus
michus 25 октября 2015 17:15
Ответов: 2 #5210
Здравствуйте. Классный модуль всё работает ! Но есть вопросик по дополнению.

1)Как сделать так что бы можно было загружать изображение и оно отправлялось на почту?

2)Почему кнопка не работает в статической странице
Прописываю
<span class="enter" data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "test"}'>Зделать заказ</span>

при сохранении пропадает "test"
<span class="enter" data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings="'{formConfig">Зделать заказ</span>
ПафНутиЙ
ПафНутиЙ 25 октября 2015 18:31
Ответов: 1 #5211
1) Ждите https://github.com/dle-modules/DLE-UniForm/issues/13
2) возможно парсер DLE съедает. Прописывайте в шаблон, а не в контент.
michus
michus 25 октября 2015 18:46
Ответов: 0 #5212
Как скоро можно будет прикреплять файлы ?

Как быть с статической страницей ? значит совместить не получится. Например . в контенте кнопка "Сделать заказ" , а на главной "Обратная связь" ?
ПафНутиЙ
ПафНутиЙ 25 октября 2015 18:53
Ответов: 7 #5213
Цитата: michus
Как скоро можно будет прикреплять файлы ?

Как только я это реализую, или реализует кто-то другой. Конкретных дат назвать не могу т.к. я этого не знаю.

Цитата: michus
Как быть с статической страницей ?


Цитата: ПафНутиЙ
Прописывайте в шаблон, а не в контент.

имелась в виду строка подключения.
michus
michus 25 октября 2015 18:55
Ответов: 6 #5214
имелась в виду строка подключения.? поподробнее можно
ПафНутиЙ
ПафНутиЙ 25 октября 2015 19:03
Ответов: 5 #5215
Просто добавьте код
<span class="enter" data-uf-open="/engine/ajax/uniform/uniform.php" data-uf-settings='{"formConfig": "test"}'>Зделать заказ</span>

в шаблон статической страницы.

P.S. Но я бы на такую кнопку не стал нажимать.

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.