MODX Formit — документация и примеры создания форм

MODX Formit - документация и примеры создания форм MODX Revo
Содержание
  1. Что такое FormIt?
  2. Установка
  3. Документация
  4. Доступные свойства (параметры)
  5. Проверка
  6. Хуки
  7. Модернизация страницы контакты — оживляем форму
  8. Создание контактной формы на FormIt
  9. Создание чанка с оформлением письма
  10. Вызываем FormIt
  11. Дополнительно — для создания более сложных форм или просто смены логики
  12. Сохранение форм в административной панели MODX
  13. Как использовать 1 обработчик для всех форм на сайте
  14. Как скрыть форму после успешной отправки.
  15. Перенаправление после успешной отправки на другую страницу
  16. Прикрепление файлов к форме
  17. Как в FORMit передать название и url адрес страницы
  18. Маска ввода для полей телефон, дата, время
  19. Обработка checkbox
  20. Базовая защита от спама — использование пустого поля NoSpam
  21. FormIt не работает — не отправляет письма, как исправить?
  22. Проверка возможности отправки почты
  23. Возможности отправки почты работает, но FormIt все равно не отправляет письма
  24. Смотрите также

В данном уроке подробно разберем документацию по компоненту для отправки форм: FormIt и различные фишки к нему. И разберем пример как создать сложную форму.

Что такое FormIt?

FormIt — это MODX сниппет для обработки формы. Обрабатывает форму после нажатия на кнопку отправки: выполняет проверку и последующие действия, такие как отправка электронного письма. Он не генерирует форму, но может повторно заполнить ее, если она не прошла проверку.

Установка

Установка у него стандартная из основного репозитория MODX.

Документация

Доступные свойства (параметры)

Это доступные общие свойства для вызова FormIt (не включая специфичные для ловушки свойства):

Имя Описание Значение по умолчанию
preHooks Какие скрипты запускать, если они есть, после загрузки формы. Это может быть список хуков, разделенных запятыми , и если первый не удастся, последующие не сработают. Хук также может быть именем сниппета, который будет выполнять этот сниппет.
renderHooks Какие сценарии запускаются, если таковые имеются, после загрузки формы, предварительные зацепки завершаются, и все поля и ошибки установлены. Это может быть разделенный запятыми список хуков, используемых для манипулирования всеми полями формы, прежде чем все будет установлено на основе данных из других пакетов или предварительных хуков. Хук также может быть именем сниппета, который будет выполнять этот сниппет.
hooks Какие скрипты запускать, если таковые имеются, после прохождения формы проходит валидацию. Это может быть список хуков, разделенных запятыми , и если первый не удастся, последующие не сработают. Хук также может быть именем Фрагмента, который будет выполнять этот Фрагмент.
submitVar Если установлено, не будет начинать обработку формы, если эта переменная POST не передана. Примечание: необходимо, если вы используете &store свойство (+ set submit var in input = «submit»!).
validate Разделенный запятыми список полей для проверки с каждым именем поля как name: validator (например:) username:required,email:required. Валидаторы также могут быть прикованы цепью, как email:email:required. Это свойство может быть указано в нескольких строках.
validationErrorMessage Общее сообщение об ошибке, для установки в качестве заполнителя в [[!+fi.validation_error_message]]случае сбоя проверки. Может содержать, [[+errors]]если вы хотите отобразить список всех ошибок в верхней части. A form validation error occurred. Please check the values you have entered.
validationErrorBulkTpl HTML tpl, который используется для каждой отдельной ошибки в общем значении сообщения об ошибке проверки. [[+error]]
errTpl HTML-оболочка для сообщений об ошибках. Примечание: не чанк, просто прямой HTML. [[+error]]
customValidators Разделенный запятыми список пользовательских имен валидаторов (фрагментов), которые вы планируете использовать в этой форме. Они должны быть явно указаны здесь, иначе они не будут запущены.
clearFieldsOnSuccess Если true, очистит поля при успешной отправке формы, которая не перенаправляет. 1
хранить Если true, данные будут сохранены в кеше для извлечения с использованием фрагмента FormItRetriever . 0
storeTime Если для «store» задано значение true, это указывает количество секунд, в течение которых сохраняются данные из отправки формы. По умолчанию пять минут. 300
StoreLocation При использовании магазина это определяет, где форма хранится после отправки. Возможные варианты: «кеш» и «сессия». По умолчанию «кэш». cache
placeholderPrefix Префикс для использования для всех заполнителей, установленный FormIt для полей. Обязательно добавьте «.» разделитель в вашем префиксе. fi.
successMessage Если не использовать переадресацию (перенаправления), отобразите это сообщение об успешном завершении после успешной отправки.
successMessagePlaceholder Имя заполнителя, для которого необходимо установить сообщение об успехе. fi.successMessage
RedirectTo ID страницы страницы «Спасибо», куда посетителя можно отправить после успешной отправки формы, но этот параметр читается ТОЛЬКО, если вы включите «перенаправление» в список & хуков.
allowFiles Укажите, разрешено ли публиковать файлы. Отправленные файлы хранятся во временном каталоге, чтобы предотвратить потерю файлов в многошаговой форме. true
attachFilesToEmail Вложение загруженных файлов в электронную почту, форма должна быть установлена ​​как enctype = «multipart/form-data» true

Проверка

Проверка в FormIt выполняется через свойство &validate и может использоваться для автоматической обработки проверки в любом из полей вашей формы.

Хуки

Хуки — это в основном скрипты, которые запускаются во время обработки FormIt. Хуки всегда выполняются в порядке их появления в свойстве. Если, например, у вас есть хук электронной почты, за которым следует хук проверки, электронное письмо будет отправлено до того, как произойдет проверка.

Если какой-либо хук потерпит неудачу, последующие не будут выполнены.

Теории думаю достаточно, перейдем к практике.

Модернизация страницы контакты — оживляем форму

Открываем ресурс (документ) Контакты, который вы должны были создать в предыдущем уроке.

Там у нас есть секция с контактной формой, которая имеет следующий код:

<form action="forms/contact.php" method="post" class="php-email-form">
             <div class="row gy-4">
                <div class="col-md-6">
                  <input type="text" name="name" class="form-control" placeholder="Your Name" required>
                </div>
                <div class="col-md-6 ">
                  <input type="email" class="form-control" name="email" placeholder="Your Email" required>
                </div>
                <div class="col-md-12">
                  <input type="text" class="form-control" name="subject" placeholder="Subject" required>
                </div>
                <div class="col-md-12">
                  <textarea class="form-control" name="message" rows="6" placeholder="Message" required></textarea>
                </div>
                <div class="col-md-12 text-center">
                  <div class="loading">Loading</div>
                  <div class="error-message"></div>
                  <div class="sent-message">Your message has been sent. Thank you!</div>
                  <button type="submit">Send Message</button>
                </div>
            </div>
        </form>

Создание контактной формы на FormIt

Начнем с разметки, первым делом разметим элемент form, сейчас он выглядит так:

<form action="forms/contact.php" method="post" class="php-email-form">

Здесь в атрибуте action указан файл — php обработчик (который мы не загружали) — по идее его можно загрузить на сайт, отредактировать и использовать, но мы все будем обрабатывать при помощи FormIt. По этому в атрибуте action указываем [[~[[*id]]? &scheme=`full`]] — данная конструкция подставляет туда полную ссылку на страницу. В конечном итоге получаем:

<form action="[[~[[*id]]? &scheme=`full`]]" method="post" class="php-email-form">
fenom
<form action="{$_modx->makeUrl($_modx->resource.id, '', '', 'full')}" method="post" class="php-email-form">

Теперь апгрейдим наши поля ввода textarea и input. Разберу на примере input, он сейчас выглядит так:

<input type="text" name="name" class="form-control" placeholder="Your Name" required>

Здесь уже есть обязательный атрибут name (если в вашей форме в полях ввода его нет, то нужно добавить, например: name="phone").

По поводу кнопки отправить, она всегда должна иметь атрибут type="submit" (у нас он есть).

В принципе наш код должен работать с Formit, единственное нужно русифицировать значения в placeholder и все остальное. В конечном итоге получаем примерно следующее:

Код получившейся html разметки формы

Это так сказать минимальная разметка, полный код формы со всей необходимой разметкой и самим вызовом (который можно скопировать) будет ниже.

Теперь нам нужно создать чанк который будет отвечать за оформление данных отправляемых на email.

Создание чанка с оформлением письма

Создайте чанк с именем «tplForm» со следующим содержимым:

<p><strong>Имя</strong>: [[+name]]</p> 
<p><strong>Почта</strong>: <a href="mailto:[[+email]]">[[+email]]</a></p>
<p><strong>Тема</strong>: [[+subject]]</p> 
<p><strong>Сообщение</strong>: [[+message]]</p>
fenom

<p><strong>Имя</strong>: {$name}</p> 
<p><strong>Почта</strong>: <a href="mailto:{$email}">{$email}</a></p>
<p><strong>Тема</strong>: {$subject}</p> 
<p><strong>Сообщение</strong>: {$message}</p>

Здесь у нас обычный html с перечислением полей формы в формате [[+name_polya]]. Имена полей берем из атрибутов name (в input и textarea).

Осталось сделать вывод самого FormIt.

Вызываем FormIt

FormIt вызывается перед самой формой, вот пример минимального вызова:

[[!FormIt? 
    &hooks=`email` 
    &emailTpl=`tplForm` 
    &emailTo=`[[++emailsender]]` 
]]
fenom

{'!FormIt' | snippet : [ 
   'hooks' => 'email', 
   'emailTpl' => 'tplForm', 
   'emailTo' => $_modx->config.emailsender, 
]}

Здесь указываем:

  • хук email — который отвечает за отправку формы на email;
  • в emailTpl — указываем ранее созданный чанк, который отвечает за оформление письма;
  • в emailTo — указываем почту, куда отправлять письма (я указал системную настройку emailsender — в которой прописан email, а так его можно и в ручную указать).

Этого достаточно чтобы форма начала отправляться. Пробуем заполнить и отправить. У меня не отправилось пока не удалил из шаблона подключение js валидатора:

<script src="/assets/vendor/php-email-form/validate.js"></script>

После этого форма начала отправляться:

Пример отправленного письма

Минусы минимального вызова следующие:

  • После отправки формы не понятно что-то отправилось или нет (пользователь не поймет отправилась форма или нет).
  • Форму можно отправить и пустой (если убрать атрибуты required).

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

Добавим ко всем нашим полям формы input и textarea (над ними или под ними) вот такие конструкции:

<span class="error">[[!+fi.error.name_polya]]</span>

А вот эту разметку вывода ошибок и сообщений:

<div class="loading">Загрузка</div>
<div class="error-message"></div>
<div class="sent-message">Ваше сообщение было отправлено. Спасибо!</div>

Можно удалить, и вместо нее поместить параметры successMessage и  validationErrorMessage:

[[+fi.validation_error_message]]
[[+fi.successMessage]]
fenom

{$fi.successMessage} 
{$fi.validation_error_message}

И перепишем вызов формит так:

[[!FormIt?
&hooks=`email`
&validate=`name:required:maxLength=^21^,email:email:required,subject:required,message:required:minLength=^30^`
&emailTpl=`tplForm`
&emailTo=`[[++emailsender]]`
&emailSubject=`Сообщение со страницы контакты на сайте [[++site_url]]`
&successMessage=`<div class="sent-message">Ваше сообщение было отправлено. Спасибо!</div>`
&validationErrorMessage=`<div class="error-message">Произошла ошибка при отправке вашего сообщения.</div>`
]]
fenom

{'!FormIt' | snippet : [ 
    'hooks' => 'email', 
    'validate' => 'name:required:maxLength=^21^,email:email:required,subject:required,message:required:minLength=^30^',
    'emailTpl' => 'tplForm', 
    'emailTo' => $_modx->config.emailsender, 
    'emailSubject' => 'Сообщение со страницы контакты на сайте' ~ $_modx->config.site_name,
    'successMessage' => '<div class="sent-message">Ваше сообщение было отправлено. Спасибо!</div>',
    'validationErrorMessage' => '<div class="error-message">Произошла ошибка при отправке вашего сообщения.</div>'
]}

Краткий разбор всего вышеописанного:

В вызове formIt появился параметр validate — в нем я перечислил поля в формате «Имя_поля:параметр:параметр». Давайте пробежимся по указанным параметрам:

  • required — поле обязательно для заполнения (html атрибут required, боты научились обходить);
  • minLength=^30^ — минимальное количество вводимых символов должно быть не меньше 30 (данный html атрибут б;
  • maxLength=^21^ — максимальное количество вводимых символов должно быть не более 21;
  • email — вводимый тип email.

К стати бывают глюки с отправками форм, когда в html разметке, у инпута указан тип email. Поэтому рекомендую поменять type="email", на type="text".

Параметры:

  • emailFrom — это email с которого отправляется форма;
  • emailSubject — тепа письма (которое к вам отправляется);
  • successMessage — сообщение которое выводиться после успешной отправки формы.
  • validationErrorMessage- сообщение которое выводиться если форма не отправлена.

Конечный код формы будет следующим:

<form action="[[~[[*id]]? &scheme=`full`]]" method="post" class="php-email-form">
    <div class="row gy-4">
        <div class="col-md-6">
            <input type="text" name="name" class="form-control" placeholder="Ваше Имя">
            <span class="error">[[!+fi.error.name]]</span>
        </div>
        <div class="col-md-6 ">
            <input type="email" class="form-control" name="email" placeholder="Ваш Email">
            <span class="error">[[!+fi.error.email]]</span>
        </div>
        <div class="col-md-12">
            <input type="text" class="form-control" name="subject" placeholder="Тема">
            <span class="error">[[!+fi.error.subject]]</span>
        </div>
        <div class="col-md-12">
            <textarea class="form-control" name="message" rows="6" placeholder="Сообщение"></textarea>
            <span class="error">[[!+fi.error.message]]</span>
        </div>
        <div class="col-md-12 text-center">
            [[+fi.validation_error_message]]
            [[+fi.successMessage]]
            <button type="submit">Отправить сообщение</button>
        </div>
    </div>
</form>
fenom

<form action="{$_modx->makeUrl($_modx->resource.id, '', '', 'full')}" method="post" class="php-email-form">
    <div class="row gy-4">
        <div class="col-md-6">
            <input type="text" name="name" class="form-control" placeholder="Ваше Имя">
            <span class="error">{$fi.error.name}</span>
        </div>
        <div class="col-md-6 ">
            <input type="email" class="form-control" name="email" placeholder="Ваш Email">
            <span class="error">{$fi.error.email}</span>
        </div>
        <div class="col-md-12">
            <input type="text" class="form-control" name="subject" placeholder="Тема">
            <span class="error">{$fi.error.subject}</span>
        </div>
        <div class="col-md-12">
            <textarea class="form-control" name="message" rows="6" placeholder="Сообщение"></textarea>
            <span class="error">{$fi.error.message}</span>
        </div>
        <div class="col-md-12 text-center">
            {$fi.validation_error_message}
            {$fi.successMessage}
            <button type="submit">Отправить сообщение</button>
        </div>
    </div>
</form>

В свежих версиях formit разметка форм на fenom не выводит сообщения об успехе и ошибках( Вызов можно оставить на fenom, а разметку форм на обычном синтаксисе.

Из самого основного все, теперь давайте протестируем работоспособность. Для этого откройте страницу контактов в режиме инкогнито и попробуйте сначала заполнить к примеру только имя (я убрал из разметки input атрибут required) и отправить форму. Должны выйти ошибки валидации.

Сообщение об успехе

И заполните форму полностью, при успешной отправке увидим наше сообщение, об успешной отправке:

Сообщение об успехе

Чтобы появлялись цветные плашки  перед кнопкой отправить (как на сриншотах выше), уберите в CSS их скрытие (display: none;):

Убираем стили скрытия

До этого их менял JS валидатор, который мы удалили.

Дополнительно — для создания более сложных форм или просто смены логики

Сохранение форм в административной панели MODX

Для того чтобы форма сохранялась в админке, вам нужно воспользоваться хуком FormItSaveForm.

Чтобы хук заработал нам его нужно указать в вызове, а также заполнить дополнительные параметры formName — название формы, formFields — перечисление полей для сохранения и fieldNames — делаем поля русскими. Пример для нашей формы указанной выше:

&hooks=`email,FormItSaveForm`
&formName=`Контакты`
&formFields=`name,email,subject,message`
&fieldNames=`name==Имя,email==Электронная почта,subject==Тема,message==Сообщение`

Ну и давайте оживим форму подписки, при этом чтобы email сохранялся в админке сайта. Форма у нас простенькая, из 1 поля:

<form action="" method="post">
    <input type="email" name="email">
    <input type="submit" value="Subscribe">
</form>

Модернизируем ее с учетом информации выше, получим:

[[!FormIt?
    &hooks=`email,FormItSaveForm`
    &validate=`email:email:required`
    &formName=`Форма подписки`
    &formFields=`email`
    &fieldNames=`email==Электронная почта`
    &emailTpl=`tplForm`
    &emailTo=`[[++emailsender]]`
    &emailSubject=`Новый подписчик с сайта [[++site_url]]`
    &successMessage=`<div class="sent-message">Спасибо за доверие!</div>`
]]
<form action="[[~[[*id]]? &scheme=`full`]]" method="post">
    <input type="email" name="email">
    <span class="error">[[!+fi.error.email]]</span>
    <input type="submit" value="Подписываться">
    [[+fi.successMessage]]
</form>

Проверяем. Формы сохраняются в Пакеты — Formit.

Просмотр форм

Как использовать 1 обработчик для всех форм на сайте

Чтобы не создавать для разных форм свои обработчики, я обычно все поля дописываю в данный обработчик, но у же с модификатором модификатором empty или if (на fenom).

Пример empty:

[[+phone:!empty=`<p><strong>Телефон</strong>: [[+phone]]</p>`]]

Пример if на fenom:

{if $phone?}<p><strong>Телефон</strong>: {$phone}</p>{/if}

В принципе можно прям все поля в обработчике завернуть в  одно из этих условий.

Как скрыть форму после успешной отправки.

Хотите скрыть форму после успешной отправки сообщения, оберите ее в конструкцию [[!+fi.successMessage:default=`код формы <form .... </form>`]]. Соответственно [[+fi.successMessage]] нужно удалить.

Перестало работать в formit 4.2.7 может и в чуть более старых версиях, возможно поправят в новых версиях компонента.

Перенаправление после успешной отправки на другую страницу

Используйте для этого хук redirect.

&hooks=`email,redirect`
&redirectTo=`12`

Где 12 — это id ресурса на который нужно перенаправить пользователя.

Примечание! Тогда из вызова формы выше можно (нужно) удалить параметр successMessage .

Прикрепление файлов к форме

Для того чтобы была возможность прикреплять и отправлять вложения, необходимо в тег формы прописать enctype=»multipart/form-data».

<form class="form-contact contact_form" action="[[~[[*id]]? &scheme=`full`]]" method="post" enctype="multipart/form-data">

Соответственно добавить поля для прикрепления файла.

<div class="control-group form-group"> 
   <label for="upload">Прикрепить файл</label>
   <input type="file" name="upload"> 
</div>

И прописать в чанке оформления письма (tplForm) данное поле.

[[+upload:!empty=`<p><strong>Вложение</strong>: [[+upload]]</p>`]]

Как в FORMit передать название и url адрес страницы

Для того чтобы в форме получить Название страницы и ее адрес — удобно когда есть сквозные формы (например заказ звонка в шапке сайта). В форме выведете 2 скрытых поля:

<input type="hidden" name="pagetitle" value="[[*pagetitle]]">

<input type="hidden" name="urladress" value="[[~[[*id]]? &scheme=`full`]]">

fenom

<input type="hidden" name="pagetitle" value="{$_modx->resource.pagetitle}">

<input type="hidden" name="urladress" value="{$_modx->makeUrl($_modx->resource.id, '', '', 'full')}">

После чего в чанке оформления письма (tplForm), добавьте следующую строку.

<p><strong>Страница, с которой отправлена форма</strong>: <a href="[[+urladress]]" target="_blank">[[+pagetitle]]</a></p>

Маска ввода для полей телефон, дата, время

Для этого подключаем к сайту jquery (если не подключен) и maskedinput (подключается внизу сайта)

<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.js"></script>

Далее прописываем для полей телефон, дата и время id=»name», пример.

<input type="text" name="phone" id="phone" class="form-control">
<input type="text" value="[[+fi.date]]" name="date" id="date" class="form-control">
<input type="text" value="[[+fi.cloc]]" name="cloc" id="cloc" class="form-control">

Далее инициализируем maskedinput

<script>
    $(function() {
        $("#date").mask("99.99.9999");
        $("#phone").mask("+7(999) 999-9999");
        $("#cloc").mask("99:99");
    });
</script>

А если нужна простенькая маска ввода только для телефона и без каких либо зависимостей, лучше использовать маску из урока: Маска ввода телефона в input на чистом JS.

Обработка checkbox

Для того чтобы FormIt начал обрабатывать чекбоксы, необходимо к атрибуту name в конце добавить [], пример:

<p class="h4">Виды работ*</p>
<div class="form-group form-check">
    <input type="checkbox" class="form-check-input" name="kopka_kolodca[]">
    <label class="form-check-label">Копка колодца</label>
</div>
<div class="form-group form-check">
    <input type="checkbox" class="form-check-input" name="chistka_kolodca[]">
    <label class="form-check-label">Чистка колодца</label>
</div>

а в чанке tplForm выводим его так:

[[+kopka_kolodca:!empty=`<p><strong>Вид работы</strong>: Копка колодца</p>`]]

[[+chistka-kolodca:!empty=`<p><strong>Вид работы</strong>: Чистка колодца</p>`]]

Базовая защита от спама — использование пустого поля NoSpam

Часто спам-боты заполняют каждое поле формы, чтобы пройти проверку. Таким образом, хорошим способом предотвращения спама является добавление поля в форму и требование, чтобы оно было пустым для успешной отправки.

Добавьте в форму поле

<input type="hidden" name="workemail" value="" />

Затем в вызове, в validate укажите через запятую после email значение workemail:blank

&validate=`email,workemail:blank`

Внимание! Если на страницах сайта по несколько форм, лучше использовать связку Formit + AjaxForm

FormIt не работает — не отправляет письма, как исправить?

Давайте разберем самые типовые проблемы, почему формы не отправляться.

Проверка возможности отправки почты

Первым делом установите из общего репозитория дополнение Console и проверьте в саму возможность отправки почты, выполнив два отдельных кода:

1. Просто через функцию mail(): print (int)mail('test@some.host', 'subject', 'message');

2. Через MODX: print (int)$modx->user->sendEmail('message');

Желательно, чтобы оба варианта вернули 1. Если оба кода возвращают не единицу, пишите хостеру и ругайтесь с ним, либо попробуйте настроить отправку почты через SMTP.

Возможности отправки почты работает, но FormIt все равно не отправляет письма

В данном случае уже может быть множество проблем: встроенные в шаблон скрипты валидаций, ошибки в коде, в настройках и т.д.

Для начала обновите FormIt (Пакеты — Установщик — проверить обновления — обновить (если пакет не актуальный)).

Создайте любую страницу (ресурс) с пустым шаблоном, отключите у него html редактор и в поле содержимое поместите самую примитивную html разметку с простеньким вызовом formit:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Тест формы</title>
</head>
<body>
[[!FormIt?
&hooks=`email`
&emailTpl=`testForm`
&emailTo=`ваш_email`
&emailFrom=`mail@ваш_домен`
&successMessage=`<h2>Отправлено</h2>`
]]
[[!+fi.successMessage:default=``]]
<form action="[[~[[*id]]]]" method="post">
    <input type="text" name="text" placeholder="Введите любой текст" value="[[!+fi.text]]" />
    <input type="submit" value="Отправить" />
</form>
[[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
</body>
</html>

Соответственно замените значения ваш_email и ваш_домен на свои. Создайте чанк testForm со следующим содержимым: <p><strong>Текст</strong>: [[+text]]</p> и попробуйте отправить форму.

Если после отправки увидите сообщение, что оправлено

Отправлено

а в почте письмо не видите, проверьте в первую очередь папку со спамом. Если и там письма нет, то попробуйте указать другой ящик (особенно если вы пользуйтесь почтой от mail.ru (bk, list)), например от google или яндекс. Так же бывает такое, что хостеры не хотят отсылать почту на сторонние сервисы, поэтому также можно попробовать создать на хостинге почту типа admin@ваш_домен и указать ее. И заново отправить форму и снова проверить отправку.

Если помогло, попробуйте перенести свой вызов формы на эту страницу (доработав данный вызов и форму) и снова отправить ее — не отправилась ищите ошибки в вызове. Если все отправляется с этой страницы, а со страницы с полноценным шаблоном нет — копайте в сторону js скриптов.

Если вообще не чего не отравляется (даже с базовой формы с рекомендациями описанными выше). Первым делом идем в логи (Управление — Отчеты — Журнал ошибок) и смотрим их. Если там пусто, можете попробовать альтернативный вариант: проверять отправку почты с помощью дополнения QuickEmail:

[[!QuickEmail?
    &to=`my-mail@mydomain.ru`
    &debug=`1`
]]

Не смогли решить проблему: опишите ее в комментариях: что в логах, пришлите сам вызов с формной и т.д. Попробую вам помочь.

Смотрите также

Как я уже говорил выше, когда у вас много форм на странице и шаблон использует — лучше использовать FormIt в связке с Ajaxform (о нем и поговорим в следующем уроке). А затем сделаем хлебные крошки — чтобы наш шаблон выглядел как оригинал.

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 5 оценок, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Аноним

    Добрый день. Что имеется в виду под — Сохранение форм в административной панели MODX? где оно сохраняется и зачем?

    Ответить
    1. Голягин Алексей

      Сохраняется в «Пакеты» — «FormIt». По поводу зачем — мало ли может вам удобнее в админке смотреть)

      Ответить
  2. Аноним

    Добрый день. столкнулся со следующими проблемами, пока не пойму как их пофиксить:
    1) не отправляет письмо. отправляет, если убрать [[++base_url]]. в самом [[++base_url]] содержится «/».
    2) не понятно как оно работает. ожидание: отправляю письмо, появляется сообщение об успешной отправке, перегружаю страницу — и там все еще висит уведомление об успешной отправке и приходит еще одно письмо. могу ошибаться, но так по идее быть не должно.
    3) если делаем ошибку, например, игнорируем e-mail, страница перегружается, все поля очищаются, ошибка только возле поля e-mail. Выглядит немного странно.

    Ответить
    1. Голягин Алексей

      1. В [[++base_url]] должно быть https://domen.ru/
      2. Перенаправляйте пользователя после отправки на страницу спасибо, либо скрывайте форму)
      3. Сделайте поле обязательным на уровне html (атрибут required)
      4. Если на сайте подключена библиотека jquery, тогда лучше используйте связку FormIt + AjaxForm (следующий урок))

      Ответить
  3. Аноним

    Спасибо большое, ваш материал мне очень помог!

    Ответить
  4. Аноним

    Сделал все как в инструкции. Нажимаю «Отправить» и просто перебрасывает на верх страницы. Нету ни редиректа на айди ресурса (&redirectTo=`6`), ни письма на почте. В логах тоже никаких ошибок нет.

    Ответить
    1. Голягин Алексей

      Скорее всего что-то упустили. Пришлите сюда или мне на почту web-revenue(собака)yandex.ru код вывода (формит с формой) и чанка обработчика

      Ответить
    2. Аноним

      Такая же история(

      Ответить
  5. Юлия Бекенёва

    Здравствуйте!
    На сайте выдает сообщение об отправке письма (на месте формы), но на почте ничего нет(((
    Что не так делаю? Может настройки как-то проверить надо?

    Ответить
    1. Голягин Алексей

      Здравствуйте. Первым делом загляните в «Управление» — «Отчеты» — «Журнал ошибок» и посмотрите есть ли какие-нибудь ошибки и исходя из ошибок если они есть будут разные решения. Если ошибок нет, а в настройках указана почта от mail.ru, то попробуйте ее заменить на яндекс или гугл почту (майл ру проблемная).
      Это основное.

      Ответить
      1. Юлия Бекенёва

        [2021-12-17 15:10:30] (ERROR @ /var/www/vhosts/julia-web.kz/httpdocs/>kbzFcnfyf_core/cache/includes/elements/modplugin/10.include.cache.php : 55) PHP warning: Attempt to read property «blocked» on null
        [2021-12-17 15:19:04] (ERROR @ /var/www/vhosts/julia-web.kz/httpdocs/>kbzFcnfyf_core/cache/includes/elements/modplugin/10.include.cache.php : 55) PHP warning: Attempt to read property «blocked» on null
        [2021-12-17 15:19:08] (ERROR @ /var/www/vhosts/julia-web.kz/httpdocs/>kbzFcnfyf_core/cache/includes/elements/modplugin/10.include.cache.php : 55) PHP warning: Attempt to read property «blocked» on null
        [2021-12-17 15:20:55] (ERROR @ /var/www/vhosts/julia-web.kz/httpdocs/>kbzFcnfyf_core/cache/includes/elements/modplugin/10.include.cache.php : 55) PHP warning: Attempt to read property «blocked» on null
        [2021-12-17 15:21:17] (ERROR @ /var/www/vhosts/julia-web.kz/httpdocs/>kbzFcnfyf_core/cache/includes/elements/modplugin/10.include.cache.php : 55) PHP warning: Attempt to read property «blocked» on null

        Вот это последние ошибки. Но я не уверена, что это связано с почтой. Ящик я поменяла на яндекс. И все равно на почте ничего(((

        Ответить
        1. Голягин Алексей

          Установите для сайта PHP 7.3 и включите поддержку Cgi

          Ответить
  6. Андрей

    Алексей, добрый день.
    Подскажите пожалуйста.
    После отправки заказа я делаю &redirectTo на стр. Спасибо
    Некоторые клиенты несколько раз возвращаются на стр.Спасибо
    и Яндекс метрика засчитывает несколько конверсий вместо одной.
    Я уже на стр. Спасибо сделал meta http-equiv=»refresh» content=»5;
    чтобы через 5 сек. перенаправить на схему проезда, все равно некоторые,
    видимо нажимая —ввернуться назад, возвращаются и метрика фиксирует
    новую конверсию. Как решить?
    Заранее Благодарю!
    С уважением, Андрей.

    Ответить
    1. Алексей автор

      Здравствуйте.
      Вариант1. Уберите со страницы спасибо кнопку назад, в место нее просто напишите, что-то типа: через 3 секунды вы будите перенаправлены на предыдущую страницу.
      Если formit не очищает после успешной отправки, введенные данные в форму, то у него есть параметр clearFieldsOnSuccess.
      Вариант2. Откажитесь от страницы спасибо. Формы отправляйте по аякс, при помощи AjaxForm, и отправку целей делаете через JS. См. статью https://web-revenue.ru/modx-revo/ajaxform

      Ответить