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

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

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




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

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

Комментарии

ПафНутиЙ
ПафНутиЙ 25 октября 2015 19:54
Прочитайте внимательно текст, написанный на кнопке smile
DimaTiunov
DimaTiunov 25 октября 2015 20:11
Хех, зделай)
michus
michus 29 октября 2015 20:50
ПафНутиЙ,С кнопкой разобрался )) Все работает , вот только поля не обязательные к заполнению не пойму в чем причина !
olesya
olesya 2 ноября 2015 23:13
Уважаемый Пафнутий, увидела ваш модуль, обрадовалась и установила ваш модуль на тестовый сайт с движком версии 10.2 Но он не работает sad Что делать? Где-то ошиблась?
http://dle-test.eurodir.ru/ (кнопка "обратная связь вверху)
ПафНутиЙ
ПафНутиЙ 2 ноября 2015 23:40
Вы подключили jqury два раза
1. http://joxi.ru/Y2LkL7ahk7Xwm6
2. http://joxi.ru/KAgW9yVuzEZJAl

Уберите лишнее подключение, думаю второе лишнее.
olesya
olesya 3 ноября 2015 00:01
Убрала второе подключение и всё заработало. Модуль шикарный и незаменимый.Спасибо!
djinn
djinn 3 ноября 2015 03:23
Спасибо за отличный модуль!
Есть три вопроса:
1. Можно ли как то вывести одну форму для звонка в одной категории и другую такую же но с другим названием в другой категории?
2. Как добавить поле для сообщения в форму для звонка?
3. Или как добавлять необходимые поля для заполнения?
ПафНутиЙ
ПафНутиЙ 4 ноября 2015 20:17
1. Можно. Достаточно использовать тег
[categor=x]

2. Посмотреть как это сделано в другом шаблоне и повторить так же.
3. см п.2
djinn
djinn 5 ноября 2015 00:30
Спасибо за подсказки!
Это получается тут можно самому какие хочешь формы создавать путем создания папок для ни и файлов...?
ПафНутиЙ
ПафНутиЙ 5 ноября 2015 00:50
да, именно для этого модуль и делался smile
michus
michus 5 ноября 2015 16:38
Добрый вечер. Есть 2 вопроса .
1)Поля не обязательные, как поправить ? http://studioyour.ru/viveki.html
2) После прописи кнопки в шаблоне статической страницы кнопка появилась и в правилах при регистрации ! Как ее убрать из правил ?
ПафНутиЙ
ПафНутиЙ 5 ноября 2015 19:57
1. Почитайте в статье раздел про config.tpl
2. Почитатйте про тег availale
michus
michus 5 ноября 2015 20:14
ПафНутиЙ,1) Спасибо за развёрнутый ответ!! Как же я раньше не догадался его прочитать !
olesya
olesya 10 ноября 2015 00:41
Уважаемый Пафнутий, установила ваш отличный модуль и почти всё настроила. Возникли трудности лишь с полями селект. У меня два таких поля. Я их прописываю в config, но информация из этих полей всё равно не поступает в письме. Прописываю через запятую, вот так - selectFields = pole1,pole2
Пробовала и с кавычками, но без разницы. Где косячу?
ПафНутиЙ
ПафНутиЙ 11 ноября 2015 21:27
Посмотрите как сделано в шаблонах, идущих в комплекте с модулем, проверьте отправку письма на них, если всё ок — сделайте по аналогии.
olesya
olesya 12 ноября 2015 03:57
Посмотрела в тестовом и всё сделала. Спасибо.
west
west 13 ноября 2015 01:39
Всё работает...месяц полёт нормальный. БОМБА, впрочем как и предыдущие работы
west
west 13 ноября 2015 01:43
Есть ли решение чтоб с даными с формы, отправлялся url откуда запрос?
olesya
olesya 13 ноября 2015 14:48
Такая функция есть. Тег {current_page}
ganniebal
ganniebal 17 ноября 2015 00:49
Здравствуйте Пафнутий! Модуль супер, но есть одно но - залил по инструкции на dle 10.6 - не работает. Тестовый сайт - http://4.u0138392.z8.ru/ - на главной странице висит Ваша кнопка. Помогите нубу разобраться...

Заранее спасибо.
ПафНутиЙ
ПафНутиЙ 19 ноября 2015 08:38
Проверил форму — работает. Что я сделал не так?
razrushutel
razrushutel 4 декабря 2015 13:27
Добрый день! Подскажите как сделать чтобы письмо приходило не от сервера, а от того емайла который вписал посетитель?
ПафНутиЙ
ПафНутиЙ 4 декабря 2015 19:39
Определение логики отправки email уведомления находится тут
sany-gapasyk
sany-gapasyk 5 декабря 2015 20:54
Добрый день, подскажи, как мне реализовать условие проверки на заполненность полей, а именно:
Нужно чтобы пользователь мог ввести либо свой телефон, либо свой email в одной форме?
razrushutel
razrushutel 6 декабря 2015 17:38
Не знаю что там делать((( подскажите пожалуйста, очень надо. Или скажите сколько это будет стоить?
ПафНутиЙ
ПафНутиЙ 7 декабря 2015 21:33
Делайте это на js.
ПафНутиЙ
ПафНутиЙ 7 декабря 2015 21:34
Напишите тиккет: https://github.com/dle-modules/DLE-UniForm/issues/new
посмотрим что не так.
KorsarSL
KorsarSL 27 декабря 2015 17:18
Уважаемый ПафНутиЙ!
Такой вопрос уже был:
при нажатии на кнопку экран затемняется но форма не показывается

Только вот где это поменять, до меня не как не дойдет!)
поменяйте кавычки по инструкции, либо приводите данные из атрибута data-uf-settings к json-объекту через

$.parseJSON('json');
ПафНутиЙ
ПафНутиЙ 27 декабря 2015 17:23
Адрес сайта?
KorsarSL
KorsarSL 27 декабря 2015 17:27
ПафНутиЙ,
http://www.comp-star.ru/unikalnye-posetiteli-na-vash-sayt.html

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

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

Информация

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