AjaxForm - Надсилання форм через Ajax
MODX Revolution має хороший компонент для форм — FormIt. Мене він усім влаштовує, крім одного — відсутності роботи з ajax. Проблема стара, вирішувалася сотнею різних способів на сотні різних сайтах, і просто не захотілося велосипедити у сто перший.
Наслідуючи відому мудрість "краще день втратити потім за п'ять хвилин долетіти", я взяв і написав новий безкоштовний компонент AjaxForm.
- Реєструє необхідні скрипти на фронтенді (jQuery.Form та jQuery.jGrowl)
- Зберігає в сесію $scriptProperties при виклику сніпета
- Виводить вказану форму, прописуючи клас ajax_form та прихований input для отримання $scriptProperties
- Вішає обробник на форму, щоб вона вирушала через ajax
- При відправці запускає вказаний сніпет для обробки та повертає відповідь від нього
- Виводить повідомлення про успіх або помилки, якщо є
Приклад виклику для FormIt:
Для виведення повідомлень про помилку заповнення поля, скрипт шукає у формі блок із класомerror_имяполяі вставляє повідомлення повідомлення (див. дефолтний чанк). При повторному надсиланні форми ці повідомлення видаляються.
По ідеї можна змінювати всі виклики FormIt на робочих сайтах, просто обертаючи їх в AjaxSubmit і переносячи форму зі сторінки в чанк - має працювати.
Звичайно ви можете використовувати і власний сніпет, який буде робити що завгодно (хоч створювати сторінки на сайті) і повинен повертати масив JSON з ключами:
- status- 1 або 0, тобто успіх чи помилка
- message— повідомлення про роботу сніпета
- data- масив для полів зпомилками, у яких ключами є ім'я поля, а значенням – повідомлення про помилку
Найпростіший приклад свого сніпета:
Загалом, качаємо, тестуємо, пишемо відгуки. Це бета-версія, написана цілком за сьогодні і, швидше за все, містить помилки.
Сніппет можна використовувати ще одним цікавим чином - просто викликавши його на сторінці, ви отримуєте підключенийjQuery.jGrowlі можете легко показувати приємні спливаючі повідомлення на javascript:
Другим параметром можна вказати «прилипаючий» popup – його потрібно буде закрити вручну, буває корисним для показу серйозних помилок.


