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

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

16.03
722
98 763
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
  • Следовать инструкциям


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



Форма обратной связи


Форма обратной связи, с ошибками


Сообщение об успешной отправке сообщения из формы обратной связи


Форма заказа звонка


Форма заказа звонка, в процессе отправки


Email, с заказом звонка


Тестовая форма с примером обработки результатов отправки формы


Настройка


  • Описание и примеры конфигурации вызова модуля можно найти в файлах, с именем 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. Имейте ввиду, что в DLE уже есть jquery и подключать её отдельно не нужно.

[Q]: Библиотека jQyery подключена 1 раз (я проверил все скринты на странице в браузере, а не в файле шаблона), но окно всё равно не открывается.
[A]: Вполне вероятно, что вы перенесли js в конец страницы, а скрипты модуля подключаете в начало. Перенесите скрипты модуля в конец страницы.

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




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

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

Комментарии

luckybuy
luckybuy 27 марта 2017 00:34
Лишний раз не лез туда где все работало )))
php 5.3 хватало )))
Но ради Вашего модуля обновился.
Модуль встал, все ок )
Спасибо за подсказку
Ms_LittlE
Ms_LittlE 1 апреля 2017 12:17
Приветствую. Павел, возможно вопрос не стандартный, можно как то форму вывести просто на страницу а не во всплывающем окне?
ПафНутиЙ
ПафНутиЙ 1 апреля 2017 13:46
Добрый день!
Внимательно прочитайте два последних предложения в статье на этой странице :)
Ms_LittlE
Ms_LittlE 1 апреля 2017 13:49
Прошу прощения за невнимательность. Спасибо за ответ.
natasha
natasha 3 апреля 2017 13:37
Не работает скрипт, настройка вот такая
templateFolder = callback
// nocache = y
// debug = y
required = phone
selectFields = calltime
sendmail = callback@mysite.com
emails = krasotanadom@ex.ua, krasotakoval@mail.ru

На почту ничего не приходит, что делать?
ПафНутиЙ
ПафНутиЙ 3 апреля 2017 13:46
sendmail = y

будет достаточно, не нужно добавлять туда email.
Проверяйте логи почтового сервера, если всё уходит, смотрите папку спам.
natasha
natasha 3 апреля 2017 13:48
Проверяйте логи почтового сервера, если всё уходит, смотрите папку спам

Спам смотрела, нету. А что такое логи и где это смотреть?
natasha
natasha 3 апреля 2017 16:37
Не приходят с формы сообщения на почту, уже целый день жду и ничего (папка спам тоже пуста) все сделано правильно, указано 2 почти и не на одну ничего не приходит. В чем может быть проблема!?
- не работает ни заказать звонок ни обратная связь. (не приходят письма....)
ПафНутиЙ
ПафНутиЙ 3 апреля 2017 19:26
Этот вопрос лучше задать хостинг-провайдеру т.к. на разных хостингах эти логи хранятся в разных местах.
ПафНутиЙ
ПафНутиЙ 3 апреля 2017 19:28
Если у вас недостаточно знаний для настройки модуля, рекомендую обратиться за помощью к фрилансерам.
Ms_LittlE
Ms_LittlE 3 апреля 2017 19:30
И от хостинга тоже зависит. У меня была подобная проблема. Если хостинг еще и бесплатный то 100% проблема в нем.
aluminoter
aluminoter 4 апреля 2017 13:07
Подскажите пожалуйста, а на php 5.3 точно не пойдет, просто выше нет возможности установить у хостера.
ПафНутиЙ
ПафНутиЙ 4 апреля 2017 13:12
Вы можете использовать предыдущую версию модуля, но всё же лучше сменить хостинг т.к. невозможность обновить/изменить ПО скорее всего означает, что хостинг сомнительного качетсва.
aluminoter
aluminoter 4 апреля 2017 13:42
Спасибо!
3dart
3dart 6 апреля 2017 11:40
Добрый день!
Установил модуль, версия php 5.6, версия дле 10.4 но при нажатии на кнопку ничего не происходит http://clip2net.com/s/3Jf9dR6 сайт http://avia-ts.com Подскажите в чем тут заковыка
ПафНутиЙ
ПафНутиЙ 6 апреля 2017 12:14
Перенесите скрипты модуля ниже скриптов DLE
3dart
3dart 6 апреля 2017 13:20
Спасибо за оперативный ответ, заработало. Не работает только на главной странице, буду искать почему
3dart
3dart 7 апреля 2017 11:29
при отправке тестовой формы приходит письмо вот в таком виде
[morefield1]{morefield1}[/morefield1]
[not_morefield1] morefield1 is empty [/not_morefield1]
[morefield2]{morefield2}[/morefield2]
[not_morefield2] morefield2 is empty [/not_morefield2]
[field1]{field1}[/field1]
[not_field1] field1 is empty [/not_field1]
[field2]{field2}[/field2]
[not_field2] field2 is empty [/not_field2]
[email]{email}[/email]
[not_email] email is empty [/not_email]
[select1]{select1}[/select1]
[not_select1] select1 is empty [/not_select1]
[select2]{select2}[/select2]
[not_select2] select2 is empty [/not_select2]

версия дле 10.4
3dart
3dart 7 апреля 2017 11:59
вопрос снят, пересобрал шаблон email.tpl все работает.
Dark63
Dark63 10 апреля 2017 15:42
Добрый день!
При нажатии на кнопку "обратная связь" получаю следующие ошибки:
Uncaught TypeError: Cannot read property 'open' of undefined
at HTMLSpanElement. anonymous (uniform.js:31)
at HTMLDocument.dispatch (jquery.min.js:3)
at HTMLDocument.q.handle (jquery.min.js:3)
Не подскажите, в чем проблема?
ПафНутиЙ
ПафНутиЙ 11 апреля 2017 08:07
Добавил faq в конец статьи, смотрите первый вопрос
Sweb-m
Sweb-m 12 апреля 2017 18:13
Сделал все по инструкции, поставил

<!-- DLE UniForm -->
<link rel="stylesheet" href="/engine/classes/min/index.php?charset=utf-8&f={THEME}/uniform/css/uniform.css&114" />
<script src="/engine/classes/min/index.php?charset=utf-8&f={THEME}/uniform/js/jquery.magnificpopup.min.js,{THEME}/uniform/js/jquery.ladda.min.js,{THEME}/uniform/js/jquery.form.min.js,{
;THEME}/uniform/js/uniform.js&114"></script>
<!-- /DLE UniForm -->

Перед </head>

Код кнопи поставил в нужное место.

После установки модуля, стили к кнопки не подтянулись, решил подключить так:

<link rel="stylesheet" href="{THEME}/uniform/css/uniform.css" />

Стили кнопки появились, (но постоянно крутить синий круг под кнопкой ), при нажатии на кнопку "Обратная связь" окно не вылетает.

Отключил все библиоткеки, оставил только код который предоставляется инструкцией, все равно, не работает.

Подскажите пожалуйста в чем может быть ошибка ?
ПафНутиЙ
ПафНутиЙ 12 апреля 2017 18:18
адрес сайта?
Sweb-m
Sweb-m 12 апреля 2017 21:31
ПафНутиЙ,
urflex.ru
ПафНутиЙ
ПафНутиЙ 12 апреля 2017 21:37
Первые два вопроса и ответа - описание ваших проблем.
Sweb-m
Sweb-m 12 апреля 2017 21:47
ПафНутиЙ,

Все поставил как написанно в инструкции ( по новой).
Отключил библиотеки дополнительные.

Вот сейчас подключил еще раз код перед </head>

код:

<!-- DLE UniForm -->
<link rel="stylesheet" href="{THEME}/uniform/css/uniform.css" />
<script type="text/javascript" src="{THEME}/uniform/js/jquery.magnificpopup.min.js"> </script>
<script type="text/javascript" src="{THEME}/uniform/js/jquery.ladda.min.js"> </script>
<script ttype="text/javascript" src="{THEME}/uniform/js/jquery.form.min.js"> </script>
<script type="text/javascript" src="{THEME}/uniform/js/uniform.js"></script>
<!-- /DLE UniForm —>

И кнопку запихнул под "Статистику", стили опять не подключились, у меня там просто вист текст "Обратная связь".

Код: <p><span class="uf-btn">Обратная связь</span></p>
<div>
<div class="uf-inline-loading"></div>
</div>

Стили кнопки подключаются если использую такой вот путь:

<link rel="stylesheet" href="{THEME}/uniform/css/uniform.css" />

Но при подключении стилей, окно "обратной связи" при клике на кнопку не работает,
ПафНутиЙ
ПафНутиЙ 12 апреля 2017 21:50
Такого быть не должно. У вас явно проблема с движком.
Sweb-m
Sweb-m 12 апреля 2017 22:05
ПафНутиЙ,
Спасибо. Не знаю что у меня какая-то ошибка с движком.
Не сталкивались с подобным ? ( что в этом случае можно сделать ? или только переустановка тут сможет помочь ? )
Sweb-m
Sweb-m 13 апреля 2017 14:03
Sweb-m,
Цитата: Sweb-m
/dle_module_install.php?module=uniform


Решение:

Были перелазит файлы движка в папку /engine/classes/min/

Повторно установить модуль по инструкции.
Все работает, спасибо.
Sweb-m
Sweb-m 13 апреля 2017 17:46
Проблемы с кодировкой

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

Добавить комментарий

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

Информация

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