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

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

16.03
660
57 658
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-хостинг). Если в папке спам ничего нет — проверьте логи почтового сервера (узнать о расположении логов можно у хостера). Самый простой способ избежать конфузов при отправке почты - подключить почту для домена.




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

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

Комментарии

Sweb-m
Sweb-m 13 апреля 2017 20:27
Sweb-m,

Решение

Необходимо сохранить страницу email.tpl в кодировке 1251
ganniebal
ganniebal 13 апреля 2017 23:26
Здравствуйте! Недавно услышал новость о штрафах со стороны РОСКОМНАДЗОРА за формы обратной связи без галочки "Я согласен на обработку персональных данных". Будет ли введена такая галочка в Uniform?
ПафНутиЙ
ПафНутиЙ 14 апреля 2017 08:19
Вы можете добавить эту галочку самостоятельно в форму, в которой это необходимо.
Так же наверняка вам необходимо будет создать страницу, где описываются детали обработки вводимых данных.
По умолчанию галочки нет т.к. не каждая форма собирает персональные данные, ведь форма может быть и формой добавления товара в корзину и формой жалобы на новость (вариантов очень много).
ganniebal
ganniebal 14 апреля 2017 22:24
Я пытался сделать проверку на чекбокс, но почему-то это поле игнорируется при обработке...
ganniebal
ganniebal 16 апреля 2017 01:15
[uf_error_checkbox1]
<li>Вы не дали солгласие на обработку персональных данных </li>
[/uf_error_checkbox1]

Делал так - не обращает внимания...
ПафНутиЙ
ПафНутиЙ 16 апреля 2017 08:42
Вот тут описана похожая ошибка, судя по всему. Как будет время - займёмся ей.
dyv
dyv 1 мая 2017 17:57
Здравствуйте.
Ранее на сервере стояла версия php5.3 и старая версия модуля. После обновления версии она перестала работать. Я удалил все файлы старой версии и установил по инструкции новые. Но письма с форм перестали доходить до адресатов. В чем может быть проблема ?
формы например тут http://silkoffroadtours.com/tours/10-the-silk-way.html и тут http://silkoffroadtours.com/contact/
ПафНутиЙ
ПафНутиЙ 2 мая 2017 04:22
Вероятно у вас есть проблемы с почтовым сервером т.к. принцип отправки почты в модуле не изменился.
dyv
dyv 2 мая 2017 07:56
ПафНутиЙ,
а структура и синтаксис файлов шаблона не изменились в новой версии? form config ?
ПафНутиЙ
ПафНутиЙ 11 мая 2017 20:02
Нет, не изменилась, можно посмотреть изменения относительно предыдущей версии тут
kirov
kirov 17 мая 2017 14:52
Здравствуйте
Выбрал папке"test" на почту приходит вот такое письмо:


Решил сделать все поп полям.
Вот такой код в "form.tpl"

<option value="Ялта" [uf_select_select3="Ялта"]Ялта[/uf_select_select3="Ялта"]>Ялта</option>
						<option value="val3" [uf_select_select3_val3]selected[/uf_select_select3_val3]>Значение 3</option>


а так в "email.tpl"

[uf_select_select3="Ялта"]Ялта[/uf_select_select3]
	[uf_select_select3="val4"]Значение 4[/uf_select_select3]


При выборе "Значение 4" в письме все нормально приходит, но когда выбираю "Ялта" приходит пустое значение
ПафНутиЙ
ПафНутиЙ 17 мая 2017 15:44
замените value="Ялта" на латиницу.
kirov
kirov 17 мая 2017 15:48
ПафНутиЙ,
Проблема в том что нельзя мне это поле менять.
Нельзя как то сделать что бы на Киррилице работало ?
ПафНутиЙ
ПафНутиЙ 17 мая 2017 15:52
Можно, попробуйте поковыряться в исходниках модуля и проследить как и что происходит со значением value у селектов.
anatohi4
anatohi4 2 июня 2017 18:11
Можно ли сделать так типа заказать каталог или подать заявку: при заполнении корректных данных и нажатие на кнопку отправить, после началось автоматическое скачивание прайс-листа?
Если да? то как?
Заранее спасибо
Heaven
Heaven 7 июня 2017 13:54
Цитата: Heaven


Помогите пожалуйста вот что показывает и дальше ничего не происходит
vorobjovsh
vorobjovsh 12 июня 2017 21:12
Здравствуйте!
На сайте стоит модуль UniForm.
Нужно в поле "Телефон" сделать маску ввода: .mask("7-999-999-9999") .
Подключаю inputmask или maskedinput - маска не выводится.
В чем может быть проблема?
Или может эти плагины как-то конфликтуют с UniForm ?
Было бы здорово, чтобы какой-то из этих плагинов шел уже изначально в UniForm !
ПафНутиЙ
ПафНутиЙ 18 июня 2017 21:31
Цитата: vorobjovsh

В чем может быть проблема?
Или может эти плагины как-то конфликтуют с UniForm ?


Вам нужно инициализировать ваш плагин после того, как отрисуется ryntyn модальног окна, почитайте документацию по magnificpopup, там есть хорошее описание колбэков.


Цитата: Heaven
Помогите пожалуйста вот что показывает и дальше ничего не происходит

Где можно наблюдать ошибку?
Heaven
Heaven 21 июня 2017 22:01
Andronilex.md
Georgy
Georgy 21 июня 2017 23:37
Подскажите, пожалуста.
Как в браузере запустить установку модуля по адресу: ваш_сайт/dle_module_install.php?module=uniform.
Непонятны поэтапные шаги.

Предыдущие шаги сделал:
Скачать актуальную версию модуля
Распаковать содержимое папки DLE-UniForm-X.X.X (X.X.X - номер актуальной версии модуля) в корень сайта.
Fiesta
Fiesta 24 июня 2017 06:43
Ребят кто подскажет как исправить.

ПафНутиЙ
ПафНутиЙ 27 июня 2017 06:48
Цитата: Heaven
Andronilex.md

Не нашёл на сайте кнопку вывода формы.

Цитата: Georgy
Как в браузере запустить установку модуля по адресу: ваш_сайт/dle_module_install.php?module=uniform.

Думаю вам не стоит устанавливать модуль т.к. указанный шаг, это самое простое, что необходимо сделать для работы модуля.

Цитата: Fiesta
Ребят кто подскажет как исправить.

Почитайте faq в конце статьи.
Fiesta
Fiesta 27 июня 2017 06:57
Дело в том что после установки все работало!
[Q]: Сделано всё по инструкции, но на модальное окно не открывается.
[A]: У вас дважды подключена библиотека jQuery.

Библиотека подключена.
ПафНутиЙ
ПафНутиЙ 27 июня 2017 06:59
Цитата: Fiesta
Библиотека подключена.

Дважды?
Fiesta
Fiesta 27 июня 2017 07:00
Цитата: ПафНутиЙ
Цитата: Fiesta
Библиотека подключена.

Дважды?


Не, 1 раз
ПафНутиЙ
ПафНутиЙ 27 июня 2017 07:02
Цитата: Fiesta
Не, 1 раз

Адрес сайта?
Heaven
Heaven 28 июня 2017 20:10
Цитата: ПафНутиЙ
Цитата: Heaven
Andronilex.md

Не нашёл на сайте кнопку вывода формы.

Цитата: Georgy
Как в браузере запустить установку модуля по адресу: ваш_сайт/dle_module_install.php?module=uniform.

Думаю вам не стоит устанавливать модуль т.к. указанный шаг, это самое простое, что необходимо сделать для работы модуля.

Цитата: Fiesta
Ребят кто подскажет как исправить.

Почитайте faq в конце статьи.



ПафНутиЙ
ПафНутиЙ 28 июня 2017 23:01
Цитата: Heaven
Andronilex.md

В консоли же всё написано:

Fatal error: require_once(): Failed opening required '/home/51031441/web/andronilex.md/public_html//engine/classes/mail/class.phpmailer.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/51031441/web/andronilex.md/public_html/engine/classes/mail.class.php on line 22
Heaven
Heaven 29 июня 2017 12:20
[quote=ПафНутиЙ][quote=Heav smile ailed opening required &#39;/home/51031441/web/andronilex.md/public_html//engine/classes/mail/class.phpmailer.php&#39; (include_path=&#39;.:/usr/share/pear:/usr/share/php&#39;) in /home/51031441/web/andronilex.md/public_html/engine/classes/mail.class.php on line 22
[/code][/quote]

txh решил проблему blush
kirov
kirov 3 июля 2017 13:08
Добавил в форму <input type="date">, календарь работает, но не могу понять что мне указать в email.tpl и config.tpl что-бы приходило на почту.

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

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

Информация

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