formit ajaxform

Суть проблемы в том что при реализации формы через AjaxForm страница обновляется и не проходит валидацию. ПИсьмо приходит.

шаблон вызова
[[!AjaxForm? 
      &snippet=`FormIt`
      &form=`tpl.AjaxForm`
      &emailTpl=`tpl.email`
      &hooks=`FormItSaveForm,email`
      &emailSubject=`test`
      &emailTo=`test@gmail.com`
      &validate=`name:required,surname:required,phone:isNumber:required,email:email:required,message:required`
      &validationErrorMessage=`В форме содержатся ошибки!`
      &successMessage=`Сообщение успешно отправлено`
    ]]
И сама форма
<form action="" id="commentForm" method="post" class="cmxform">
    <h2 class="feedback">[[++cultureKey:is=`ru`:then=`Обратная связь`:else=`[[++cultureKey:is=`ua`:then=`Зворотній звязок`:else=`Contact Us`]]`]]<a href="javascript:PopUpHide()" class="close__form">✖</a></h2>
    <h3 class="sec__feedback">[[++cultureKey:is=`ru`:then=`Как к Вам обращаться?`:else=`[[++cultureKey:is=`ua`:then=`Як до Вас звертатись?`:else=`How can contact you?`]]`]]</h3>
    <div class="form__name">
        <input type="text" id="name" name="name" class="form-control" placeholder="[[++cultureKey:is=`ru`:then=`Имя`:else=`[[++cultureKey:is=`ua`:then=`Ім'я`:else=`First name`]]`]]" >
    </div>
    <div class="form__sur">
        <input type="text" id="surname" name="surname" class="form-control" placeholder="[[++cultureKey:is=`ru`:then=`Фамилия`:else=`[[++cultureKey:is=`ua`:then=`Фамілія`:else=`Second name`]]`]]" >
    </div>
    <div class="form__phone">
        <input type="text" id="phone" name="phone" class="form-control" placeholder="[[++cultureKey:is=`ru`:then=`Телефон`:else=`[[++cultureKey:is=`ua`:then=`Телефон`:else=`Phone`]]`]]" >
    </div>
    <div class="form__mail">
        <input type="text" id="email" name="email" class="form-control" placeholder="Email" >
    </div>
    <div class="form__mes">
        <textarea id="message" name="message" rows="5" columns="5" class="form-control" placeholder="[[++cultureKey:is=`ru`:then=`Сообщение`:else=`[[++cultureKey:is=`ua`:then=`Повідомлення`:else=`Message`]]`]]"></textarea>
    </div>
    <input type="submit" class="other__button__form">[[++cultureKey:is=`ru`:then=`Заказать звонок`:else=`[[++cultureKey:is=`ua`:then=`Замовити звінок`:else=`Submit`]]`]]</input>


    [[+fi.success:is=`1`:then=`
        <div class="alert alert-success">[[+fi.successMessage]]</div>
    `]]
    [[+fi.validation_error:is=`1`:then=`
        <div class="alert alert-danger">[[+fi.validation_error_message]]</div>
    `]]
</form>
Евгений
10 сентября 2020, 17:55
modx.pro
863
0

Комментарии: 16

Николай Савин
10 сентября 2020, 18:17
0
Измените раздел на вопросы
По существу — у вас поди head или body не закрыт
    Евгений
    10 сентября 2020, 19:38
    0
    От части помогло, сам не заметил. Теперь 500я от ajaxform/action.php
      Андрей
      10 сентября 2020, 21:25
      0
      500 надо смотреть в серверном error.log, там должна быть указана ошибка.
        Евгений
        10 сентября 2020, 21:34
        0
        Смотрел, там только дубликаты ресурсов. Больше ничего не было, нашёл в интернете способ поставить register_globals Off, но увы это не помогло. В чём может быть проблема?
          Андрей
          10 сентября 2020, 21:55
          0
          Дубликаты ресурсов это в логе modx вероятно. А нужно смотреть именно серверный лог на хостинге.
            Евгений
            10 сентября 2020, 22:24
            0
            а где он лежит не подскажите? я смотрел в core/cache/logs
              Андрей
              10 сентября 2020, 22:46
              0
              Это зависит от вашего хостинга, везде по разному. Если не найдёте сами, можете задать вопрос в техподдержку.
                Александр Мельник
                10 сентября 2020, 22:48
                0
                логи сервера не имеют отношения к сайту и не могут (ну по крайней мере не должны) лежать в его директориях.
                Все зависит исключительно от того какой у вас сервер (apache, nginx) от того настраивали его вы сами или специалисты хостинга.
                Вы можете либо сами имея доступ ssh к серверу посмотреть файлы конфигурации вебсервера или же написать в службу поддержки хостинга.
      Александр Мельник
      10 сентября 2020, 22:00
      0
      Как так — страница обновляется и не проходит валидацию.
      Раз вы вызываете ajaxform значит отправка формы должна проходить без перезагрузки страницы.
      Попробуйте открыть консоль браузера и смотреть ошибки js, у вас явно что с jquery, может у вас крутой проект на vuejs а ajaxform требует jquery насколько я помню.
      Лично мне не нравится что у вас в вызове ajaxform не переданы параметры — отправитель письма и имя отправителя. очень много раз встречался что если эти параметры не переданы, письма просто не доходят, но раз вы говорите что письмо приходит, то ройте только в ошибки со стороны js.
        Александр Мельник
        10 сентября 2020, 22:09
        0
        Ну и кстати, мне не раз здесь говорили на форуме знающие люди, что не нужно добавлять форме класс ajax_form? но я всегда добавляю и это часто решает много проблем. попробуйте и вы
        <form action="" id="commentForm" method="post" class="cmxform ajax_form">
          Евгений
          10 сентября 2020, 22:19
          0
          проблема была не в закрытом html теге, видать аякс не отрабатывал до конца
            Андрей
            10 сентября 2020, 22:50
            0
            Сниппет ajaxForm сам добавляет класс если не указан, никогда с этим проблем не было.
            // Add selector to tag form
            if (preg_match('#<form.*?class=(?:"|\')(.*?)(?:"|\')#i', $content, $matches)) {
                $classes = explode(' ', $matches[1]);
                if (!in_array($formSelector, $classes)) {
                    $classes[] = $formSelector;
                    $classes = preg_replace(
                        '#class=(?:"|\')' . $matches[1] . '(?:"|\')#i',
                        'class="' . implode(' ', $classes) . '"',
                        $matches[0]
                    );
                    $content = str_ireplace($matches[0], $classes, $content);
                }
            } else {
                $content = str_ireplace('<form', '<form class="' . $formSelector . '"', $content);
            }
              Александр Мельник
              10 сентября 2020, 22:57
              0
              Вы правы, но я добавляю сам руками. Мне так спокойнее что ли.
            Руслан Алеев
            11 сентября 2020, 00:37
            0
            Еще поменьше используйте test в названии ящиков, тексте и т.п. Особо умные хосты или хуки форм могут тупо блочить отправку, причем не сообщая визуально никак об этом :)
              Евгений
              11 сентября 2020, 00:44
              +1
              письма приходят, проблема была в не закритом хтмл, а сейчас проблема что файл по пути ajaxform/action.php недоступен
              Евгений
              11 сентября 2020, 01:06
              0
              Проблема была в правах доступа на файл
              П.С. логи сервера тоже ничего не дали, проверял методом тыка. Хостинг ukraine
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                16