AjaxForm + FormIt и отдача файла

Всем привет!
Возникла задача:
«После заполнения полей и прохождения валидации, стартует скачка файла.»

логично, что нужно использовать хуки FormIt (download_hook)
[[!AjaxForm?
	&snippet=`FormIt`
	&form=`down_price.tpl`
	&emailTpl=`zvonok.sent`
	&hooks=`spam,email,download_hook`
	&emailSubject=`Скачали прайс-лист`
	&emailTo=`[[++emailsender]]`
	&validate=`phone:required`
	&validationErrorMessage=`В форме содержатся ошибки!`
	&successMessage=`Сообщение отправлено!`
]]

хук:
$file = 'file.zip';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    return true;
}

при вызове хука как отдельный сниппет на странице, скачка начинается.

Вызов как хука FormIt — не работает.
Консоль браузера пуста.
на почту письма не приходят.

Скорее всего дело в заголовка header();

Кто нибудь делал подобное? или подскажите как лучше, что да как?
Константин Ильин
24 июля 2015, 10:29
modx.pro
4
1 711
0

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

Максим Кузнецов
24 июля 2015, 15:28
+2
Раз вы реализуете данную задачу через ajax, имхо, лучше и загрузчик вынести в скрипты:

$(document).on('af_complete', function(event, response) {
	if (response.form.attr('id') == 'айди_формы' && response.success == true) {
		$.fileDownload('путь_до_файла').done(function () { alert('Файл успешно загружен!'); });
	}
});

Хук, соответственно, не нужен.
    Константин Ильин
    24 июля 2015, 15:36
    0
    Блин! отличная идея Максим!
    чет забыл про af_complete совсем
      Константин Ильин
      24 июля 2015, 16:26
      +1
      скачал
      fileDownload
      в коде пришлось поправку сделать
      response.form[0].class = "download_price"
      через атрибут — не реагировал
      response.form.attr('class ') == 'download_price'
      все заработало, спасибо за идею!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4