[AjaxForm] Версия 1.1.0-pl Улучшенная регистрация js. Ajaxform modx


AjaxForm + контекст = "Не могу найти указанный ключ формы (action)." / modx.pro

Есть сайт (site.com). Стала задача сделать для него серию лендингов, управлять ими планируется из одной админки. Cделан поддомен (landing.site.com) для этого сайта, установлен отдельный modx и в нем через контексты планируется создавать новые лендинги (landing.site.com/1st/, landing.site.com/2nd/, landing.site.com/3rd/… ) На странице одного из этих лендингов есть вызов 4х форм через ajaxForm и почему-то когда идет проверка работоспособности форм при залогиненном юзере (админ) формы исправно отправляются, а если юзер аноним (обычный посетитель фронтенда сайта), то выдается такая ошибка «Не могу найти указанный ключ формы (action).» В логе ошибок нет. Искал тут ответы, все что нашел:Кто встречался с такой ситуацией и знает как это решить отзовитесь.

Код вызова одной из форм (остальные также только меняются id и name у полей и самих форм)

[[!AjaxForm? &snippet=`FormIt` &form=`pusmTpl` &emailTpl=`pusmEmailTpl` &hooks=`email, FormItSaveForm` &formName = `[[+pusm_title]]` &formFields = `pusm_title,pusm_phone,pusm_url` &fieldNames = `pusm_title==Заголовок окна,pusm_phone==Номер телефона,pusm_url==Страница отправки` &emailFromName =`[[!getIp]]` &emailSubject=`Лендинг - [[+pusm_title]]` &emailTo=`{$_modx->config.send_to_emails}` &emailFrom=`[email protected]` &submitVar=`pusm_submit` ]]Код формы:<form data-abide novalidate action="{$modx->resource->uri}" method="post" accept-charset="utf-8"> <input type="tel" name="pusm_phone" value="[[!+fi.pusm_phone]]" pattern="integer" maxlength="13" required placeholder="Номер телефона"><input type="submit" name="pusm_submit" value="Отправить заявку"> <input type="hidden" name="pusm_url" value="{$modx->config.site_url}{$modx->resource->uri}"> <input type="hidden" name="pusm_ip" value="[[!getIP]]"> <input type="hidden" name="pusm_title" value=""> </form>

modx.pro

AjaxForm перезагружает страницу / modx.pro

Проблема такая, я делаю вызов AjaxForm на странице и при отправке перезагружает страницу.

Вот чанк с вызовом AjaxForm

[[!AjaxForm? &snippet=`FormIt` &form=`newContactForm_tpl` &hooks=`recaptchav2,spam,FormItSaveForm,email,emailUser,infotable,redirect` &emailTo=`****@yandex.ru` &formName=`Новая контактная форма` &emailSubject=`Rest-vm: [[+theme]]` &emailFromName=`[[+name]]` &emailTpl=`mailchunk` &validate=` name:required:minLength=`2`, email:email:required, theme:required:minLength=`5`` &successMessage=`<p>Спасибо, Ваше сообщение отправлено.</p>` ]] Шаблон чанка newContactForm_tpl[[!+fi.successMessage]] <div>[[+fi.error.error_message]]</div> <form action="[[~[[*id]]]]" method="post" enctype="multipart/form-data" onsubmit="validate()"> <input type="hidden" name="nospam:blank" value="" /> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <div> <div> <input type="text" name="name" value="[[+fi.name]]" required placeholder="Имя" data-rules="* l>=3"/> <span>[[+fi.error.name]]</span> </div> <div> <input type="text" name="email" value="[[+fi.email]]" required placeholder="Email" data-rules="* @"/> <span>[[+fi.error.email]]</span> </div> <div> <input name="contact_phone_NA_format" size="14" value="[[+fi.contact_phone_NA_format]]" maxlength="15" placeholder="Телефон"/> <span>[[+fi.error.contact_phone_NA_format]]</span> </div> <div> [[!recaptchav2_render]] [[!+fi.error.recaptchav2_error]] </div> </div> <div> <div> <input type="text" name="theme" required data-rules="* l>=5"value="[[+fi.theme]]" placeholder="Тема письма"/> <span>[[+fi.error.theme]]</span> </div> <div> <textarea name="message" cols="55" rows="7" placeholder="Текст">[[+fi.message]]</textarea> </div> <div> <input type="file" value="[[!+fi.file]]" name="file" accept="image/*"> </div> <div > <input type="file" value="[[!+fi.file2]]" name="file2" accept="image/*"> </div> <div > <input type="file" value="[[!+fi.file3]]" name="file3" accept="image/*"> </div> <div > <input type="file" value="[[!+fi.file4]]" name="file4" accept="image/*"> </div> <div> <input type="submit" value="Отправить" name="Submit"/> </div> </div> </form> Шаблон чанка mailchunkИмя: [[+name]] Email: [[+email]] Телефон: [[+contact_phone_NA_format]] Тема: [[+theme]] Текст: [[+message]] Файлы: [[+file]] [[+file2]] [[+file3]] [[+file4]] Выдает следующий лог ошибок[2017-02-02 13:36:52] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in be37d16719141e75dd2a7e73bfd8f85a line 695 [2017-02-02 13:36:52] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in be37d16719141e75dd2a7e73bfd8f85a line 695 [2017-02-02 13:36:52] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in 1e80624d695257fbbd5767b9547777b0 line 695 [2017-02-02 13:37:20] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/cache/includes/elements/modsnippet/23.include.cache.php : 29) An error occurred while trying to send the email: [2017-02-02 13:37:20] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in be31c5285de3d9f9d3d6ed3ab076659f line 695 [2017-02-02 13:37:20] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in be31c5285de3d9f9d3d6ed3ab076659f line 695 [2017-02-02 13:37:20] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in 0d7ae39afb04dd415e00d51822d5eb35 line 695 [2017-02-02 13:37:29] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in 624be82deedefa0adde903cb949c1037 line 395 [2017-02-02 13:37:29] (ERROR @ /var/www/restvm/data/www/rest-vm.ru/core/components/pdotools/model/pdotools/pdotools.class.php : 940) {set} and {add} accept only variable in 624be82deedefa0adde903cb949c1037 line 395

modx.pro

Ошибки AjaxForm / modx.pro

Не отправляет письма и не выводит сообщения AjaxForm Формаl В логе не дает ошибок, а в консоли skrinshoter.ru/s/250916/44teYH default.js:39 Uncaught SyntaxError: missing ) after argument list contact.html:341 Uncaught ReferenceError: AjaxForm is not defined Как исправить?Содержание вызова формы[[!AjaxForm? &snippet=`FormIt` &hooks=`email` &form=`FormContact` &emailSubject=`Письмо с сайта olgashalashova.ru` &emailFrom=`[email protected]` &emailTo=`[email protected]` &emailTpl=`emailContactTpl` &validate=`name:minLength=^2^,email:required,phone:required,message:minLength=^10^` &validationErrorMessage=`Пожалуйста, заполните поля помеченные *` &successMessage=`Сообщение успешно отправлено, наш менеджер свяжется с Вами в ближайшее время` ]]Чанк FormContact<form action="[[~[[*id]]]]" method="post" data-wow-delay="0.6s"> <div> <input type="text" name="name" value="[[+fi.name]]" placeholder="Имя" required/> <span>[[+fi.error.name]]</span> </div> <div> <input type="email" value="[[+fi.email]]" placeholder="Email" name="email" required> <span>[[+fi.error.email]]</span> </div> <div> <input type="text" value="[[+fi.phone]]" placeholder="Телефон" name="phone" required> <span>[[+fi.error.phone]]</span> </div> <div> <textarea placeholder="Ваш вопрос или сообщение" rows="7" name="message" required>[[+fi.message]]</textarea> <span>[[+fi.error.message]]</span> </div> <div> <button type="submit">ОТПРАВИТЬ</button> </div> [[+fi.success:is=`1`:then=` <div>[[+fi.successMessage]]</div> `]] [[+fi.validation_error:is=`1`:then=` <div>[[+fi.validation_error_message]]</div> `]] </form>Чанк emailContactTpl<h4>Сообщение</h4> <p>От кого: [[+name]]</p> <p>E-mail: [[+email]]</p> <p>Телефон: [[+phone]]</p> <p>Сообщение: [[+message]]</p>

modx.pro

[AjaxForm] Версия 1.1.0-pl Улучшенная регистрация js / modx.pro

Представляю вам новую версию компонента AjaxForm, который позволяет отправлять любые формы через Ajax.

Внимание, эта версия содержит изменения, которые могут поломать работу сторонних дополнений, использующих AjaxForm. Обязательно проверяйте работу форм после обновления.

AjaxForm очень универсальный, благодаря чему некоторые разработчики используют его в своих дополнениях, но у него есть 2 неприятные особенности:

  1. Он инициализируется один раз для контекста
  2. Соотвественно, он может подключить только один файл javascript
Таким образом получается, что все ajax формы на сайте должны отправляться одним универсальным javascript, что не очень-то подходит для использования в сторонних дополнениях.

Так что, встречайте версию 1.1.0-pl, которая добавляет 2 новых параметра для разработчиков:

  1. &formSelector — Имя CSS класса, который будет использован как jQuery селектор для инициализации формы. По умолчанию «ajax_form».
  2. &objectName — Имя объекта для инициализации в подключаемом javascript. По умолчанию «AjaxForm».
При этом будут подключены все уникальные javascript, указанные в параметре &frontend_js для разных вызовов сниппета.

То есть, теперь можно написать несколько вариантов объекта AjaxForm, положить в разные файлы javascript и вызывать вот так:

[[!AjaxForm]] [[!AjaxForm? &formSelector=`favorites-form` &forntend_js=`/assets/.../favorites.js` &objectName=`AjaxFavoritesForm` ]]Первый вызов подключить стандартный AjaxForm с родными скриптами, и запустит его родной объект. А второй вызов загрузит полностью кастомизированный скрипт и запустит уже его объект.

2 разных вызова AjaxForm на странице, с разными настройками и параметрами никак не мешают друг другу работать:

Как вы видите, в javascript больше нет глобального объекта afConfig, общего для всех скриптов. Его заменяет локальная переменная с конфигом, которую каждый экземпляр AjaxForm может использовать на свой лад.

Так что, я советую всем авторам, которые используют AjaxForm в своих дополнениях обновить их с учетом новых возможностей как можно скорее. И я вам очень прошу, не включайте больше в свои собственные скрипты обрезанный объект AjaxForm, который перезаписывает стандартный.

Все изменения на GitHub.

modx.pro


Prostoy-Site | Все права защищены © 2018 | Карта сайта