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

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

16.03
614
28775
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.



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


  • Обновлён установщик
  • Добавлен новый параметр parseSendMail, добавляющий возможность производить манипуляции над данными перед отправкой email. В параметр передаётся путь к php файлу, без расширения, отностительно папки engine/modules. Например можно добавить в шаблон email-сообщения новые теги [footer]{footer}[/footer]. Для этого в конфиге прописываем parseSendMail = addFooter, создаём файл engine/modules/addFooter.php со следующим содержимым:
    <?php
    if ($arSendMail['select1'] === 'val1') {
    	$mailTpl->set('[footer]', '');
    	$mailTpl->set('[/footer]', '');
    	$mailTpl->set('{footer}', $arSendMail['select1']);
    } else {
    	$mailTpl->set_block("'[footer](.*?)[/footer]'si", '');
    }





Для вывода формы непосредственно на странице достаточно прописать в нужном месте шаблона (начиная с версии 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

Ответы на частые вопросы



[Q]: Почему ничего не работает?
[A]: C вероятностью в 80% у вас дважды подключена бибилиотека jQuery (20% - проверьте шаги по инструкции).

[Q]: Сделано всё по инструкции, но на модальное окно не открывается.
[A]: У вас дважды подключена библиотека jQuery.

[Q]: Не приходит письмо.
[A]: Проверьте конфиг модуля (поле emails должно быть раскомментировано). Если всё ок — проверьте папку спам (недопочты типа mail.ru, rambler и прочие noname почтовые службы очень часто при неправильно настройке сервера отправляют письма в спам, особенно, если у вас shared-хостинг). Если в папке спам ничего нет — проверьте логи почтового сервера (узнать о расположении логов можно у хостера). Самый простой способ избежать конфузов при отправке почты - подключить почту для домена.




Жду ваших отзывов!

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

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

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

+

Комментарии

alucard
alucard 10 мая 2015 14:15
Ответов: 6 #4775
чет не работает :(
http://cl.ly/av7c
ПафНутиЙ
ПафНутиЙ 10 мая 2015 14:27
Ответов: 5 #4776
Адрес сайта?
alucard
alucard 10 мая 2015 14:41
Ответов: 4 #4777
адрес http://goo.gl/qyOWFh
кнопка на шапке "Отправить заявку"
ПафНутиЙ
ПафНутиЙ 10 мая 2015 15:10
Ответов: 1 #4778
Попробуйте переместить подключение скриптов модуля перед
<script type="text/javascript" src="/engine/classes/min/index.php?charset=utf-8&f=/templates/Default/js/jquery.js,/templates/Default/js/uikit.min.js,/templates/Default/js/cover.min.js,/templates/Default/js/slideshow.js,
/templates/Default/js/slideshow-fx.js,/templates/Default/js/sticky.min.js&7"></script>

Возможно, что скрипты модуля конфликтуют с другими, используемыми на сайте. Попробуйте отключить webform от rezer`a
alucard
alucard 10 мая 2015 15:26
Ответов: 0 #4780
Попробовал убрать все, js срипты кроме библиотеки jquery . оставил только модуля, все равно не работает
alucard
alucard 10 мая 2015 15:23
Ответов: 1 #4779
поставил туда куда нужно, убрал все лишние js скрипты, а так же веб форму резера
ПафНутиЙ
ПафНутиЙ 10 мая 2015 18:48
Ответов: 0 #4781
Проблема решена в скайпе, на странице была дважды подключена библиотека jquery
Roman48
Roman48 11 мая 2015 18:57
Ответов: 1 #4782
привет.нет возможности версию под кодировку -1251
выложить?я бы сам зделал бы,но не знаю что надо с файлом зделать чтоб поменять кодировку
ПафНутиЙ
ПафНутиЙ 11 мая 2015 19:35
Ответов: 0 #4783
Я уже давно не поддерживаю 1251, не проверяю и не разрабатываю под эту кодировку.
Axel
Axel 11 мая 2015 23:34
Ответов: 0 #4784
Павел, у Вас что не модуль, то шедевр=)
ravchik
ravchik 12 мая 2015 08:23
Ответов: 1 #4785
Здравствуйте, Павел!
Подскажите пожалуйста, есть ли возможность обработки любой формы на странице, или только вызов AJAX-окна с формой? Просто иногда нужно всегда показывать форму, а не только вызывть по клику...
ПафНутиЙ
ПафНутиЙ 12 мая 2015 09:06
Ответов: 0 #4786
Модуль работает только в ajax режиме, но ничто не мешает сделать ajax вызов формы после загрузки страницы. Или как вариант положить результат вывода формы на страницу в виде вёрстки, и отправлять её через ajax.
Если смогу — добавлю такой пример в ближайшее время.
ravchik
ravchik 12 мая 2015 09:12
Ответов: 0 #4787
ПафНутиЙ, было-бы здорово!
Mek
Mek 13 мая 2015 21:15
Ответов: 1 #4796
А как же прикрепление файла (файлов) в форме обратной связи?
ПафНутиЙ
ПафНутиЙ 13 мая 2015 22:20
Ответов: 0 #4797
Пока никак. Не было такой задачи в рамках модуля, но в принципе реализуемо.
Crashlabs
Crashlabs 21 мая 2015 16:38
Ответов: 1 #4818
Отличный модуль, Павел!
У меня к Вам такой вопрос:
Возможно ли к нему прикрутить календарь для выбора даты? Поскольку планирую использовать для бронирования.
ПафНутиЙ
ПафНутиЙ 21 мая 2015 18:30
Ответов: 0 #4819
Думаю будет достаточно сменить тип поля на date
<input type="date">

Если нужна кроссбраузерность тогда попробуйте вот этот плагин только нужно иметь виду, что вызов плагина календаря сдледует производить после того, как загрузится форма, например тут
theartes
theartes 24 мая 2015 12:29
Ответов: 1 #4820
ПафНутиЙ,
скажите пожалуйста как реализовать что бы эта заполненная форма отправлялась не на почту, а сообщением пользователю зарегистрированному на сайте?

так же не много удобнее будет получать сообщения
ПафНутиЙ
ПафНутиЙ 24 мая 2015 13:16
Ответов: 0 #4822
Довольно просто - замените функцию отправки email-сообщения на функцию отправки персонального сообщения.
Но на email гораздо удобнее, поверьте.
theartes
theartes 24 мая 2015 13:33
Ответов: 1 #4823
ПафНутиЙ,
подскажите мне пожалуйста как мне ее заменить? я не очень в этом понимаю(
ПафНутиЙ
ПафНутиЙ 24 мая 2015 13:44
Ответов: 0 #4825
Пишите мне на email, доработка будет платной.
theartes
theartes 24 мая 2015 13:38
Ответов: 0 #4824
какая функция отвечает за отправку персонального сообщения?
fkanits
fkanits 31 мая 2015 00:37
Ответов: 2 #4828
Поздравления для отличний модул UniForm, установил на сайт, все работает отлично, но подскажите пожалуйства, может форма прислат мне информация от страница из которого отправленo сообшение, его URL?
ПафНутиЙ
ПафНутиЙ 31 мая 2015 00:40
Ответов: 1 #4829
https://github.com/dle-modules/DLE-UniForm/issues/3#issuecomment-105287310
fkanits
fkanits 31 мая 2015 08:16
Ответов: 0 #4830
Пожалуйста, а где, в какой файл написат етот код?
fkanits
fkanits 2 июня 2015 20:06
Ответов: 0 #4831
Помогите, не понял как нада сделат ето , в какой файл..или просто сделайте стандартна опция модула
web_meff
web_meff 11 июня 2015 17:32
Ответов: 1 #4848
Доброго времени суток. Хороший модуль формы, все работает, даже чересчур. У меня при отправки формы приходит 2 одинаковых сообщений, я для проверки вставлял свое мыло в файл config.tpl в поле emails, больше нигде мое мыло не указано, подскажите, пожалуйста, в чем может быть проблема?
ПафНутиЙ
ПафНутиЙ 11 июня 2015 17:46
Ответов: 0 #4849
а попробуйте указать какой-нибудь левый email, придёт сообщение на вашу почту?
Если придёт — значит где-то так настроен сервер или что-то вызывает отправку на ваш ящик, если не ридёт — пишите тиккет
mamontway
mamontway 15 июня 2015 15:29
Ответов: 8 #4851
Добрый день! Увидел данный модуль очень обрадовался, мне его и надо было. Но к сожалению не работает.Все поставил по инструкции, при нажатии на кнопку экран затемняется но форма не показывается. если можно подскажите почему? Адрес страницы http://fly-tech.ru/podklyuchitsya.html
ПафНутиЙ
ПафНутиЙ 15 июня 2015 22:44
Ответов: 7 #4853
поменяйте кавычки по инструкции, либо приводите данные из атрибута data-uf-settings к json-объекту через
$.parseJSON('json');

и модуль перекодируйте в кодировку сайта.

Информация

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