私は助けが必要です... SOで質問するのはこれが初めてなので、親切にしてください:)
私はphpからファイルを強制的にダウンロードしようとしているので、ユーザーが特定のボタンを押すと、ファイルがダウンロードされます。このファイルは、すべての登録ユーザーの csv (電子メール、ユーザー名) です。
このスクリーンショットでわかるように、このボタンを管理者 > ユーザー画面に追加することにしました。
そこで、administrator/components/com_users/views/users/view.html.phpのaddToolbar関数に次のコードを追加しました。
JToolBarHelper::custom('users.export', 'export.png', 'export_f2.png', 'Exportar', false);
このボタンは、com_users\controller\users.php コントローラーの次の関数にマップされます。
public function exportAllUsers() {
ob_end_clean();
$app = JFactory::getApplication();
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=ideary_users.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "email,name\n";
$model = $this->getModel("Users");
$users = $model->getAllUsers();
foreach ($users as $user) {
echo $user->email . ", " . ucwords(trim($user->name)) . "\r\n";
}
$app->close();
}
さて、これは実際には完全にうまく機能しています。
ここでの問題は、ファイルをダウンロードした後、管理者で POST を引き起こすボタンを押すと、本来のアクションを実行するのではなく、ファイルをもう一度ダウンロードすることです! 例えば:
- 「エクスポート」ボタンを押しました
- 「users.csv」ダウンロード
- 次に、「検索」ボタンを押しました
- "users.csv" のダウンロード... 一体何?
エクスポート ボタンを押すと、JS が呼び出されてフォームのアクション属性が URL に設定され、応答などを期待し、他のボタンがフォームのアクション属性を再設定できないようになっていると思います。これに対する本当の解決策は思いつきませんが、できればハッキングは避けたいと思います。
では、この場合に joomla が提供する標準的でエレガントなソリューションは何でしょうか?