Помогите дописать хук для FormIt?

Есть задача, чтобы при отправке заполненной формы скачивался файл, а затем пользователя перенаправляло на другую страницу. Файл загружается через TV-поле.

Пробую сделать через хук download:

$kp = $_SERVER['DOCUMENT_ROOT'];
  $kp .= $modx->resource->getTVValue('kp');

  if (file_exists($kp)) {
      header('Content-Description: File Transfer');
      header('Content-Type: application/octet-stream');
      header('Content-Disposition: attachment; filename="'.basename($kp).'"');
      header('Expires: 0');
      header('Cache-Control: must-revalidate');
      header('Pragma: public');
      header('Content-Length: ' . filesize($kp));
      readfile($kp);
      exit;
  } else {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'Нет такого файла');
  }
  return true;


FormIt вызываю как обычно:

[[!FormIt?
        	&hooks=`spam,download,email,redirect`
        	&emailTpl=`tpl.sendEmail.kp`
        	&redirectTo=`69`
        	&validate=`name:required,phone:required,email:required,service`
        	&submitVar=`get-kp`
        	&store=`1`
        ]]

Проблема в том, что файл скачивается, но редирект не срабатывает. Полагаю, это из-за функции exit, но если её убрать (или поставить вместо неё return true;) — то редирект срабатывает, а файл не качается.
Подскажите, как сделать чтобы оба действия срабатывали?
Александр
25 августа 2017, 05:55
modx.pro
1
1 300
0

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

Roman
25 августа 2017, 09:47
0
Если хук download убрать, то редирект происходит?
    Александр
    25 августа 2017, 09:50
    0
    Да, без download всё в порядке — редиректит
      Roman
      25 августа 2017, 09:52
      0
      exit пробовали убирать?
        Александр
        25 августа 2017, 09:54
        0
        Да — редирект происходит, но файл не скачивается.
    Roman
    25 августа 2017, 09:54
    0
    Попробуйте так
    $kp = $_SERVER['DOCUMENT_ROOT'];
      $kp .= $modx->resource->getTVValue('kp');
    
      if (file_exists($kp)) {
          header('Content-Description: File Transfer');
          header('Content-Type: application/octet-stream');
          header('Content-Disposition: attachment; filename="'.basename($kp).'"');
          header('Expires: 0');
          header('Cache-Control: must-revalidate');
          header('Pragma: public');
          header('Content-Length: ' . filesize($kp));
          readfile($kp);
          return true;
      } else {
        $modx->log(xPDO::LOG_LEVEL_ERROR, 'Нет такого файла');
      }
      Александр
      25 августа 2017, 09:57
      0
      Пробовал уже (но на всякий случай ещё раз проверил). Результат тот же — редиректит без скачивания
        Александр
        25 августа 2017, 09:58
        0
        Письма при этом стабильно отсылаются на почту.
        Алексей Ерохин
        25 августа 2017, 11:30
        0
        Повесьте js функцию на отправку с открытием нового окна с файлом
          Александр
          25 августа 2017, 12:02
          0
          А можно поподробнее, куда именно повесить функцию?
            Алексей Ерохин
            25 августа 2017, 15:59
            0
            $('.form').on('submit', function (e) {
            	window.open(url_with_file_download);
            });
            Откроет новое окно/вкладку, на странице вызывайте сниппет отдающий файл
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10