Помогите дописать хук для FormIt?
Есть задача, чтобы при отправке заполненной формы скачивался файл, а затем пользователя перенаправляло на другую страницу. Файл загружается через TV-поле.
Пробую сделать через хук download:
FormIt вызываю как обычно:
Проблема в том, что файл скачивается, но редирект не срабатывает. Полагаю, это из-за функции exit, но если её убрать (или поставить вместо неё return true;) — то редирект срабатывает, а файл не качается.
Подскажите, как сделать чтобы оба действия срабатывали?
Пробую сделать через хук 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;) — то редирект срабатывает, а файл не качается.
Подскажите, как сделать чтобы оба действия срабатывали?
Комментарии: 10
Если хук download убрать, то редирект происходит?
Да, без download всё в порядке — редиректит
exit пробовали убирать?
Да — редирект происходит, но файл не скачивается.
Попробуйте так
$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, 'Нет такого файла');
}
Пробовал уже (но на всякий случай ещё раз проверил). Результат тот же — редиректит без скачивания
Письма при этом стабильно отсылаются на почту.
Повесьте js функцию на отправку с открытием нового окна с файлом
А можно поподробнее, куда именно повесить функцию?
$('.form').on('submit', function (e) {
window.open(url_with_file_download);
});
Откроет новое окно/вкладку, на странице вызывайте сниппет отдающий файл
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.