Форма зворотний зв'язок modx evo стилі. Форми зворотний зв'язок за допомогою FormIt. Перенаправлення на сторінку успішного виконання
У нас залишилася лише одна сторінка, яку ми ще не переробили. Це сторінка Контакти. Тут у нас, крім контактної інформації, буде розташована форма зворотнього зв'язку. У MODx існує спеціальний сніпет для створення такої форми - eForm. Давайте спочатку розглянемо, з чого взагалі може складатися форма зворотного зв'язку.
1. Насамперед, це сама форма з полями введення Ім'я, Поштової адреси, Теми повідомленняі самого Повідомлення. Для захисту від спаму слід додати капчу - форму для введення коду зі згенерованого зображення. Потрібно ще включити перевірку правильності введення інформації.
2. Повідомлення відвідувача про надсилання повідомлення.
3. Форма надісланого повідомлення, яке прийде на пошту.
Створюємо чанк із шаблоном форми зворотного зв'язку
Перш ніж створювати чанк із шаблоном для форми зворотного зв'язку, давайте вивчимо код, яким описується ця форма у нашому шаблоні. Відкриваємо в Notepad++ файл contact.htmlякий лежить у папці C:/xampp/htdocs/site/www/assets/templates/templatemo_250_chess/. Це будуть рядки зі 135 по 159 включно. Як бачимо, це контейнер з id="contact_form", В якому знаходиться наша форма. Беручи за основу цей код, створюємо новий чанк form-tplі додаємо необхідні нам плейсхолдери:
Зворотній зв'язок
[+validationmessage+]
Розбір коду, йдемо зверху донизу:
&hooks - сюди додаються різні хуки, у тому числі самописні: у нашому випадку 2 стандартних: span - простий захист від спаму та email - обов'язковий, для відправки даних на Поштова скринька. Про решту хуків я досить докладно розповідаю у відео.
&emailTpl - чанк з оформленням листа, має наступний код:
Від кого: [[+name]]
Телефон: [[+phone]]
E-mail: [[+email]]
Повідомлення: [[+message]]
&emailTo — адреса електронної пошти куди надсилаються форми, даному випадкувказано системне налаштування(ключ) ++emailsender
&emailSubject — тема листа, що надсилається
&validate - прописуємо обов'язкові поля для заповнення і часто поля для захисту від спаму
&successMessage — повідомлення після успішного надсилання
Розбирати код форми не буду, кому цікаво дивіться відео та читайте документацію: docs.modx.com/extras/revo/formit
Прикріплення файлів до форми
Для того, щоб була можливість прикріплювати та відправляти вкладення, необхідно в тег форми прописати
Enctype="multipart/form-data"
і відповідно додати поля для прикріплення файлу
Обробка чекбоксів та option
Декілька форм на одній сторінці
Просто у викликах кожної форми пропишіть
&submitVar=`ім'я форми англійською`
кожна форма має своє ім'я.
Боротьба зі спамом
Як не крути, але ви однозначно зіштовхнетеся зі спамом - самий ефективний спосібдля боротьби з ним - так само можете спробувати.
Практично на всіх комерційних сайтах є сторінка контактів, на яких розташована контактна форма, через яку користувачі можуть написати адміністрації сайту. Сьогодні ми розглянемо як швидко створити контактну форму. Реалізовувати форму зворотного зв'язку ми будемо за допомогою пакету Formitу зв'язці з пакетом AjaxForm, встановіть їх, якщо вони у вас не встановлені.
Створення форми зворотного зв'язку на MODX Revo з дозволом на обробку персональних даних відповідно до закону №152-ФЗ "Про персональні дані" від 27.07.2006.
Насамперед створюємо чанк, в якому буде зберігатися сама форма, нехай це буде чанк «kontact-form» і поміщаємо в нього код стандартної форми, я в основному роблю сайти з використанням bootstrap, так що візьму стандартну заготівлю трохи перероблену, її статичний код буде таким:
Ваш зовнішній виглядбуде відрізнятися, оскільки моя форма стилізована під проект, css стилівикладати не бачу сенсу.
Ось тут ви можете переглянути інші форми getbootstrap.com/css/#forms
А тепер переробимо код у динамічний з урахуванням синтаксису. Formitі AjaxForm, Отримаємо наступне.
Тепер створюємо ще один чанк, який формуватиме лист, назвемо його tpl-kontact-form з таким вмістом:
Ім'я: [[+name]]
Email: [[+email]]
Телефон: [[+pfone]]
Повідомлення: [[+message]]
Ну і сталося зробити висновок у потрібному місці:
[[! AjaxForm? &snippet=`FormIt` &form=`kontact-form` &emailTpl=`tpl-kontact-form` &hooks=`spam,email` &emailSubject=`Повідомлення з сайту [[++site_url]]` &emailTo=` [email protected]` &validate=`name:required,email:required` &validationErrorMessage=`У формі містяться помилки!` &successMessage=`Повідомлення успішно надіслано!` ]]
Не забудьте змінити значення emailToна свою пошту.
Документація по компонентам:
- FormIt — docs.modx.com/extras/revo/formit
- AjaxForm — docs.modx.pro/components/ajaxform
Ось у принципі і все!
Урок, на якому розглянемо створення форми зворотного зв'язку в CMF MODX Revo lution, використовуючи компоненти AjaxForm та FormIt.
Призначення компонентів FormIt та AjaxForm
FormIt – це компонент (СНІПЕТ) для MODX Revolution, призначений для обробки форми на стороні сервера. Він може здійснювати перевірку полів форми (валідацію) перед подальшими діями, захищати сайт від отримання спаму, відправляти дані форми на пошту, зберігати копії заповнених форм, здійснювати редирект на іншу сторінку (наприклад, після успішного відправлення форми на email), виконувати функцію автовідповідача та багато іншого.
Але для того, щоб працювати з FormIt через AJAX необхідно використовувати додатковий компонент AjaxForm.
Принцип роботи форми зворотного зв'язку
Перед тим як перейти до розробки форми зворотного зв'язку MODX Revolution, розглянемо основний алгоритм її роботи.
Після відкриття деякої сторінки з формою (вона береться з чанка, вказаного у параметрі &form виклику сніпету AjaxForm при формуванні сторінки на сервері), користувач переходить до її заповнення. Завершивши заповнення, користувач натискає на кнопку "Надіслати" і компонент AjaxForm ( код JavaScript) відправляє її на сервер за допомогою AJAX. На сервері даний компонент запускає сніпет FormIt і передає йому дані форми. Обробивши ці дані, Сніппет FormIt формує відповідь, яка через компонент AjaxForm передається клієнту і відображається на сторінці користувача. Відповідь може бути позитивною (це означає, що форма пройшла валідацію і, наприклад, дані були успішно відправлені на пошту) або негативною (наприклад, при заповненні форми користувач припустився деяких помилок).
Створення форми зворотнього зв'язку
Для створення форми зворотного зв'язку в MODX Revolution необхідно виконати такі основні кроки:
![](https://i0.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-template-form-feedback.png)
Розглянемо кроки 2 і 4 докладніше.
Створення HTML форми у чанці
Створення HTML форми зворотнього зв'язку можна здійснити за допомогою копіювання заготовки tpl.AjaxForm.example. Наприклад, надамо скопійованому чанку ім'я tpl.AjaxForm . Цей чанк вже містить готову HTML-форму, що складається з 3 полів: Ім'я, E-mail та Повідомлення. Основні дії, які треба робити з формою, в основному будуть зводитися до додавання нових категорій або до видалення існуючих. Під категорією розумітимемо групу пов'язаних між собою елементів: мітка (label), елемент форми (input , select , textarea) та елемент span (використовується для відображення помилки валідації).
![](https://i2.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-chunk-tlp-ajax-form.png)
Основні моменти:
- Текст етикетці (елемента label). Зазвичай береться або зі словника (для багатомовних сайтів) або безпосередньо за допомогою тексту.
- Елемент span повинен мати атрибут class зі значенням error_name , в якому фразу name необхідно змінити на значення атрибута name елемента форми, за яким він розташований.
Увага: використання плейсхолдера [[+fi.name]] як значення атрибуту value елемента форми та плейсхолдера [[+fi.error.name]] як контент елемента span актуальне тільки для класичної роботи з FormIt , тобто. без AJAX. Вони використовуються для заповнення форми при її повторному надсиланні для того, щоб зберегти значення введені користувачем і відобразити помилки валідації.
Наприклад, додамо в HTML формуполе для введення телефонного номера:
У результаті цей чанк міститиме наступний HTML-код:
Створення коду, що містить виклик сніпету AjaxForm
Відкриваємо шаблон, який використовуватиме ресурс і вводимо код, який здійснюватиме все це.
[[! AjaxForm? &form=`tpl.AjaxForm` &snippet=`FormIt` &hooks=`FormItSaveForm,email` &emailSubject=`Тестове повідомлення` &emailTo=` [email protected]`&emailFrom=` [email protected]` &emailTpl=`tpl.email` &validate=`name:minLength=^2^,email:email:required,message:minLength=^10^` &validationErrorMessage=`У формі містяться помилки!` &successMessage=`Повідомлення успішно надіслано` ] ]
Розберемо основні параметри:
- &form - відповідає за чанк, що містить форму (tpl.AjaxForm).
- &snippet - сніпет, що обробляє форму (FormIt).
- &hooks – хуки, які виконуватиме сніпет FormIt після успішної перевірки форми (1 - FormItSaveForm, 2 - email). Хуки - це скрипти, які запускаються після того, як форма пройшла валідацію (перевірку). Вони вказуються через кому і послідовно запускаються один за одним. Якщо в одному з них сталася помилка, то решта не запускається. У цьому уроці будемо використовувати 2 хуки. Хук FormItSaveForm призначений для збереження форми у базі даних. Хук email призначений для надсилання даних форми на пошту.
- &emailSubject, &emailTo, &emailFrom, &emailTpl – параметри, значення яких використовує хук email. Вони призначені для вказівки теми листа (&emailSubject), адреси відправки (&emailTo), заголовка From (&emailFrom), шаблону листа (&emailTpl).
- &validate – параметр, виходячи з значення якого здійснюється валідація форми. Значення параметра є список елементів, розділених між собою комами. Кожен елемент складається з імені елемента форми (який потрібно перевірити) та правила (вимоги до нього), розділені між собою за допомогою знака двокрапки. Наприклад, валідатор name:minLength=^2^ перевіряє, щоб поле name містило не менше 2 символів. Валідатор email:email:required перевіряє, щоб поле mail містило адресу електронної пошти. З основними правилами створення валідаторів можна познайомитись на сторінці "FormIt Validators".
- &validationErrorMessage - містить повідомлення, яке буде виводитися, якщо у формі містяться помилки.
- &successMessage - повідомлення, яке побачить користувач, якщо повідомлення буде успішно надіслано.
Залишилося лише створити чанк tpl.email, який міститиме шаблон листа.
Повідомлення
Від кого: [[+name]]
E-mail: [[+email]]
Телефон: [[+phone]]
Повідомлення: [[+message]]
MODX - Чанк tpl.email![](https://i0.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-chunk-contain-template-mail.png)
Увага: Для виведення значень полів форми використовується плейсхолдери.
Демонстрація роботи форми зворотного зв'язку
Основні моменти під час роботи з формою зворотного зв'язку на сторінці продемонструємо за допомогою таких зображень.
![](https://i2.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-blank-feedback.png)
![](https://i0.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-form-with-error.png)
![](https://i2.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-form-feedback-success-send.png)
![](https://i0.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-view-completed-form-in-control-panel.png)
![](https://i2.wp.com/itchief.ru/assets/images/tickets/2016.01/modx-letter-came-on-mailbox.png)