ユーザーにファイルを「プッシュ」した後にリダイレクトすることは可能ですか?


7

サイトの使用状況に関する内部分析をサイトが生成する設定があります。ユーザーは個人分析のダウンロードを要求できます。この情報は機密情報であるため、ファイルを作成していません。変数にCSVファイルを生成し、これをユーザーに「プッシュ」します。

function _cex_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
}

これにより、ユーザーのブラウザに「ファイルの保存」ダイアログが表示され、ユーザーがファイルを作成します。サイトの管理者が「破壊的なエクスポート」をトリガーできることを除いて、これは正常に機能します。この状況では、破壊的なエクスポートを実行する前に管理者が受け入れる必要がある二次確認フォームがあります。

問題は、この「プッシュダウンロード」ルーチンがDrupalページの処理を終了することです。プッシュダウンロードルーチンが呼び出された後、管理者をページにリダイレクトする方法はありません。管理者はブラウザから「ファイルを保存」ダイアログを表示しますが、確認フォームには残ります。

私はマルチステップフォームルートを試してみましたが、奇妙なリダイレクトで1日たたき回った後、私はその混乱から後退しました。ChaosToolのマルチステップフォームロジックも検討し始めました。しかし、問題は本当にこの「プッシュダウンロード」がガイド付きプロセスキラーであるということです。

おそらく、最初の「エクスポート」ボタンのクリックをインターセプトするjquery確認ダイアログ、完全にJavaScriptで確認、php / FAPI確認フォームの作成を忘れ、ユーザーがjqueryで確認すると、インターセプトされたエクスポートをプログラムで送信しますか?

回答:



3

私の知る限り、それは不可能です。コンテンツ(この場合はファイル)を送信するか、リダイレクトすることができます。両方ではありません。これはHTTPプロトコルの制限です


2

ユーザーがフォームを送信するときにトークンを生成し、CSVファイルを生成するために必要なすべての情報をトークンに格納するのが最善の策だと思います。フォームでユーザーを適切なページにリダイレクトし、drupal_set_message()を使用してトークンを含むリンクを提供します。

リンクをクリックすると、CSVファイルが生成され、その時点でユーザーに送信されます。確かに、フォームの送信時に生成するよりも複雑ですが、Fuzzy76が言うように、HTTPプロトコルの制限に反対しています。この方法を使用すると、JavaScriptベースのソリューションを作成するよりも簡単な場合があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.