Несколько форм на одной странице AjaxForm [Решено]

На странице выводится список услуг (дочерние ресурсы) c кнопкой ЗАКАЗАТЬ
Как реализовать чтобы в сабжах отправляемых писем вставлялся {$pagetitle} ресурса соответствующей услуги
{'!pdoPage' | snippet : [
    'ajaxMode' => 'default',
    'tpl' => '@INLINE 
***
<h2 class="media-heading">{$pagetitle}</h2>
***
<button type="button" class="btn btn-secondary btn-lg btn-block" data-toggle="modal" data-target="#adviceModal">ЗАКАЗАТЬ</button>
***
{$content}
***',
    'limit' => 10,
    'includeTVs' => 'img',
    'tvPrefix' => '',
    'includeContent' => 1,
  ]}
По клику на кнопку ЗАКАЗАТЬ открываются модальные окна Bootstrap
Вызов AjaxForm:
[[!AjaxForm?
    &snippet=`FormIt`
    &form=`kontact-form`
    &emailTpl=`tpl-kontact-form`
    &hooks=`spam,email`
    &emailSubject=`Сообщение с сайта [[++site_url]]`
    &emailTo=`***@gmail.com`
    &validate=`name:required,email:required`
    &validationErrorMessage=`В форме содержатся ошибки!`
    &successMessage=`Сообщение успешно отправлено!`
]]
Решение в комменте ниже
websfera
24 августа 2018, 23:28
modx.pro
2 120
0

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

Кирилл Киселев
25 августа 2018, 08:12
0
Для заголовка услуги прописываешь в чанке:
{$_modx->resource.pagetitle}

По поводу модального окна, вешаешь событие af_complete и в нём запускаешь модальное окно.
docs.modx.pro/komponentyi/ajaxform#%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B5-af_complete
$('#myModal').modal('show');
    websfera
    25 августа 2018, 10:10
    0
    ответ слишком сложный для меня, можно поподробнее?
    1. в каком чанке нужно прописать?
    {$_modx->resource.pagetitle}
    Если прописываю в
    &form=`kontact-form`
        &emailTpl=`tpl-kontact-form`
    получаю только заглавие страницы списка услуг в форме.
    2. «вешаешь событие af_complete» — куда его «вешать»?
    Я думал нужно здесь что-то менять:
    &emailSubject=`Сообщение с сайта [[++site_url]]`
    Чтобы в заголовке письма вместо «Сообщение с сайта...» был указан нужный pagetitle дочернего ресурса.
      Кирилл Киселев
      25 августа 2018, 11:09
      0
      Не так прочитал изначально вопрос.
      Тогда…
      Параметр successMessage лежит в сессии в массиве AjaxForm => Ключ Формы => successMessage
      Ключ формы лежит в элементе input с именем af_action

      Вижу такой вариант, что перед открытием формы мы посылаем ajax запрос с заголовком и ключом формы, который нам нужно отображать в сабже письма. Собственно, присваиваем в сессию параметру successMessage тот заголовок, который мы передали по ajax. Модальное окно открывается, спокойно заполняем форму и письмо приходит уже с этим заголовком.
    UDAV
    25 августа 2018, 11:21
    0
    Через жквери делайте. При клике на услугу, считываете из соответствующего дива название услуги, а потом это название в скрытое поле в форме передаете, соответственно отправляется форма с названием услуги.
      websfera
      25 августа 2018, 19:05
      1
      0
      Решение (Благодаря помощи Павла Романова)
      В чанк kontact-form добавляем скрытое поле:
      <input type="hidden" value="" name="itemtitle" class="itemfield" />
      Добавляем в кнопку обработчик клика onclick=«getItem('{$pagetitle}');»:
      <button type="button" class="btn btn-secondary btn-lg btn-block" data-toggle="modal" data-target="#adviceModal" onclick="getItem('{$pagetitle}');">ЗАКАЗАТЬ</button>
      и выносим в вызове pdoPage в чанк, либо заменяем ('{$pagetitle}') на (\'{$pagetitle}\')
      Добавляем где-нибудь на странице функцию:
      <script>
          function getItem(i){
              $('.itemfield').val(i);
          }
      </script>
      В вызов ajaxForm прописываем:
      &emailSubject=`[[+itemtitle]]`
      у меня сработало.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7