Skip to content
xCalc
xCalc
Универсальный конструктор калькуляторов
  1. Компоненты
  2. xCalc
  3. Кейсы
  4. AjaxForm при выводе результатов

AjaxForm при выводе результатов

Часто бывает необходимо вывести какую-то форму по итогу расчёта. Для этого воспользуемся jQuery триггером xccResultsResponse, который появился с версии 1.0.2.

Вместо чанка tpl.xCalc.outer в сниппет передайте кастомный чанк с кодом примерно таким:

fenom
<div class="xcalc [ js-xcc ]" data-xcc-propkey="{$propkey}">
  <h1>{$calculator.title}</h1>

  {if $calculator.description?}
    <div>
      {$calculator.description}
    </div>
  {/if}

  <form class="xcc-form [ js-xcc-form ]" action="" method="post">

    {* Fields *}
    {foreach $fields as $field}
      {var $tpl = ($field.tpl ?: ('tpl.xCalc.field.' ~ $field.type))}
      {$_modx->getChunk($tpl, $field)}
    {/foreach}

    {* Button *}
    <button type="submit">Рассчитать</button>

  </form>

  <div class="[ js-ajaxform ]" style="display: none;">
    {'!AjaxForm' | snippet : [
      'snippet' => 'FormIt',
      'hooks' => 'email',
      'emailSubject' => 'Тестовое сообщение',
      'emailTo' => 'mymail@yandex.ru',
      'validate' => 'name:required,email:required,message:required',
      'validationErrorMessage' => 'В форме содержатся ошибки!',
      'successMessage' => 'Сообщение успешно отправлено',
    ]}
  </div>

  <div class="xcc-results [ js-xcc-results ]">
    {*...*}
  </div>
</div>

<script>
  $(document).on('xccResultsResponse', function (e, response, $form, propkey) {
    if (response.success) {
      let $wrap = $form.closest('[data-xcc-propkey="' + propkey + '"]');
      let $af = $wrap.find('.js-ajaxform');
      $af.show();
    }
  });
</script>

Мы в коде страницы вызываем форму AjaxForm и заранее скрываем её. А при успешном расчёте, при помощи jQuery получаем эту форму и отображаем.