Проблема с AjaxForm

Всем привет.
Столкнулся с такой проблемой:
На страницу через чанк выводится pop-up форма, чанк выводится вот так:
{include 'POP_UP'}
Внутри вот такая конструкция
{'!AjaxForm' | snippet : [
	'snippet' => 'FormIt',
	'form' => 'form_tpl.Callback_popup',
	'hooks' => 'spam,email',
	'emailTpl' => 'form_tpl_report.Callback_popup',
	'emailTo' => '[[#1.form.emailTo]]',
	'emailFrom' => '{$_modx->config.emailsender}',
	'emailFromName' => '{$_modx->config.site_name}',
	'emailSubject' => 'Заказ звонка с {$_modx->config.site_url}',
	'validate' => 'workemail:blank,phone:required',
	'validationErrorMessage' => 'В форме содержаться ошибки!',
	'successMessage' => 'Спасибо! Ваше сообщение успешно отправлено',
]}
Так же на страницах есть формы которые выводятся похожей конструкцией только напрямую в шаблоне (Открытые формы)

Так вот, когда в поле доп поле form.emailTo указана 1 почта, как пример example@mail.ru, то всё работает и всё хорошо, но как только я указываю дополнительную почту example@mail.ru,example2@mail.ru то, popup форма перестаёт отправлять сообщение, а так же вместо «Спасибо! Ваше сообщение успешно отправлено» я получаю «Форма успешно отправлена».
Открытые же формы работают без проблем что так, что так.

Может кто то сталкивался с подобной проблемой?
В логах ошибок сайта пусто.

Возможно проблема не в AjaxForm конечно
Иванов Степан
24 мая 2017, 18:43
modx.pro
2
2 479
0

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

Александр
24 мая 2017, 22:43
+1
Попробуйте параметр написать внутри чанка так:
'emailTo' => (1 | resource : 'form.emailTo'),
    Максим Кузнецов
    24 мая 2017, 23:05
    +1
    {'!AjaxForm' | snippet : [
    	...
    	'emailFrom' => '{$_modx->config.emailsender}',
    	...
    ]}
    — нет нужды для повторного открытия {}, т.к. в самом сниппете они уже используются => вы уже внутри синтаксиса fenom. Так будет правильнее:

    {var $emailto = 1 | resource : 'form.emailTo'}
    
    {'!AjaxForm' | snippet : [
    	'snippet' => 'FormIt',
    	'form' => 'form_tpl.Callback_popup',
    	'hooks' => 'spam,email',
    	'emailTpl' => 'form_tpl_report.Callback_popup',
    	'emailTo' => $emailto,
    	'emailFrom' => $_modx->config.emailsender,
    	'emailFromName' => $_modx->config.site_name,
    	'emailSubject' => 'Заказ звонка с ' ~ $_modx->config.site_url,
    	'validate' => 'workemail:blank,phone:required',
    	'validationErrorMessage' => 'В форме содержаться ошибки!',
    	'successMessage' => 'Спасибо! Ваше сообщение успешно отправлено',
    ]}
      Иванов Степан
      25 мая 2017, 13:55
      0
      Спасибо. Я правильно понимаю, что вот этот код
      {var $emailto = 1 | resource : 'form.emailTo'}
      я могу указать в одном месте на всех страницах, и использовать $emailto во всех остальных формах на сайте?
        Максим Кузнецов
        25 мая 2017, 14:54
        1
        0
        Таким методом нет — у переменной будет ограниченная область видимости.

        Есть 2 варианта:

        — засунуть е-мейл в плейсхолдер:
        {var $emailto = 1 | resource : 'form.emailTo'}
        {$_modx->setPlaceholder('emailto', $emailto)}
        и в последующем получать его в любом коде, инициализированном после записи плейсхолдера:
        {$_modx->getPlaceholder('emailto')}

        — воспользоваться дополнением clientconfig и вынести ваш е-мейл в системную настройку, которую в дальнейшем можно будет получить так:
        {$_modx->config.emailto}
      Иванов Степан
      25 мая 2017, 13:54
      0
      Спасибо, большое. Оба варианта рабочие
        Александр Быковский
        12 марта 2022, 14:45
        0
        Добрый день. Чтобы не создавать новый топик опишу ситуацию здесь.
        Имею такой вызов сниппета AjaxForm
        {'!AjaxForm'|snippet:[
          'snippet' => 'FormIt',
          'form' => '@FILE chunks/feedback/feedback_form.tpl',
          'emailTpl' => '@FILE chunks/feedback/feedback_letter.tpl',
          'hooks' => 'chekSpamProtectionMessageKey,checkSpam,email,FormItSaveForm',
          'formName' => 'Форма'
          'formFields' => 'name,email,phone,message',
          'fieldNames' => 'name==Имя отправителя,email==Электронная почта,phone==Телефон,message==Сообщение',
          'emailTo' => 'email_to'|config,
          'emailSubject' => $_modx->getPlaceholder('email_subject'),
          'emailReplyTo' => $_modx->getPlaceholder('email'),
          'emailFrom' => 'email_from'|config,
          'emailFromName' => 'site_name'|config,
          'validate' => 'name:required,email:email:required,message:required,nospam:blank,usecontrol:blank',
        ]}
        Соответственно значение emailReplyTo берется из поля email отправляемой формы. И оно удачно отправляется.
        Но вот данные для emailSubject планировал брать из скрытого поля
        <input type="hidden" name="email_subject" id="af_email_subject" value="Форма обратной связи">
        значение которого меняется в зависимости от шаблона и выбранных настроек, чтобы не плодить формы.Так вот оно не отправляется. Письма приходят без темы.
        Но если использовать такую конструкцию в вызове
        'emailSubject' => '[[+email_subject]]',
        то всё работает.
        Я где-то что-то упустил? Спасибо
          Артур
          13 марта 2022, 20:38
          0
          А где определяется плэйсхолдер email_subject?
            Александр Быковский
            13 марта 2022, 21:22
            0
            там же где и email, в форме, только email_subject определён заранее, до отправки, а email непосредственно в момент
              Артур
              13 марта 2022, 22:17
              0
              Вот я и спрашиваю где определен и зачем его получать $_modx->getPlaceholder('email_subject'), если он определен как ТВ то надо так $_modx->resource.email_subject, если в ClientConfig или системных настройках то так $_modx->config.email_subject
                Александр Быковский
                14 марта 2022, 07:14
                0
                нет, он определен значением скрытого инпута в форме.
                <input type="hidden" name="email_subject" id="af_email_subject" value="Форма обратной связи">
                Таким образом:
                emailReplyTo = input name=«email»
                emailSubject = input name=«email_subject»
                  Артур
                  14 марта 2022, 11:02
                  0
                  А значение скрытого инпута откуда берётся?
                    Александр Быковский
                    14 марта 2022, 11:17
                    0
                    По умолчанию данных хранятся в чанке формы (value=«Форма обратной связи»), иногда меняется средствами JS, как раз для того, чтобы были разные темы писем.
                      Артур
                      14 марта 2022, 12:29
                      0
                      Я для себя давно решил, что если какой-то вариант не срабатывает, зачастую быстрее придумать другой, нежели выяснять почему не работает этот. Поэтому я бы на вашем месте написал хук который бы из $_POST брал нудное значение и клал в свойства скрипта.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          13