Максим

Максим

Был в сети 10 декабря 2023, 17:27
Заказы принимаю
Тут есть несколько вариантов:
1) Написать процессор, в котором будет вызываться сниппет и дергать процессор.
2) Создать страницу, на которой вызывается сниппет и дергать эту страницу.
3) Через коннектор. Этот метод я только планирую изучить.
По платным дополнениям лучше задавать вопросы в поддержку компонента. Я, например, не работал с этим компонентом. Поэтому в голову приходить только костыль по общим правилам работы.
Перехватываем событие (onClick или onSubmit), аяксом дергаем сниппет.
Могу только порекомендовать дебажить. Таким образом выявить момент на котором выкидывает и вашего бека. От этого уже и плясать. Никто не отменял в сниппетах var_dump(), print_r() ну и собственно логи MODx!
Если на страницу, но которой вызывается ajaxForm отправить данные методом POST, то ваша валидация на стороне JS будет игнорирована.
Для того что бы такое не приходило нужно проверку осуществлять на стороне PHP. Для этого у Formit есть хуки.
Офф. док:
https://docs.modx.com/extras/revo/formit/formit.hooks
По примеру в докуентации создаете хук для проверки заполненности скрытого поля и добавляете свой хук в вызов сниппета.
Промер хука:
<?php
// Name = testHook
$hidden = $hook->getValue('hiddenField');
if(!empty($hidden)){return false;}
return true;
В вызове сниппета:
&hooks=`testHook,email`
Ну а проверку на нажатие кнопки можно добавить в этот же хук. Она будет доступна в хуке, если у кнопки будет стоять атрибут name, например name=«formSubmit»
У вас валидация проверка на спам происходит на фронте и если отпрвито постом, то проходим мимо проверки!)
Напишите хук для проверки скрытого поля и можно еще контролировато нажатие кнопки присвоив ей имя. Написанный хук указать перед хуком email.
По правилам валидации на странице должен быть уникальный id тега, а у вас дублируется. Простейшим решением будет для мобильной версии изменить id и в своем основном скрипте написать нужный код. Объект miniShop2 доступен глобально. Это можно проверить console.log(miniShop2);