it-swarm-ko.tech

FAPI 양식 제출시 사용자에게 CSV 파일 보내기

사용자로부터 일부 정보를 수집 한 다음 CSV 파일을 생성하는 FAPI 양식이 있습니다. 사용자가 양식에서 '내보내기'를 클릭하면 CSV가 바로 다운로드됩니다.

그러나 제출 핸들러가 CSV 생성 함수를 호출하면 양식이 CSV를 제공하지 않고 리디렉션 만합니다.

임시 파일을 생성하지 않고이 양식이 CSV를 사용자에게 직접 제공하도록 할 수있는 방법이 있습니까?

4
Chris Cohen

이 블로그 게시물의 코드 http://sirkitree.net/node/2 가 도움이 될 것 같습니다. 기본적으로 리디렉션을 방지하려면 제출 핸들러 끝에 exit () 또는 die ()를 사용해야합니다.

 $ file = $ header. "\ n"; 
 foreach ($ accounts as $ row) {
 $ file. = $ row. "\ n"; 
} 
 header ( 'Cache-Control : must-revalidate, post-check = 0, pre-check = 0'); 
 header ( 'Content-Type : text/csv') ; 
 header ( 'Content-Disposition : attachment; filename = "users.csv"'); 
 die (print $ file); 
 
6
Sivaji

다음 루틴은 사용자에게 파일을 "푸시"하여 브라우저에 "파일 저장"대화 상자를 표시합니다.

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;
} 

(여기서 'cex'는 내 사용자 정의 모듈의 이름이고 '_cex'는 개인 함수를 나타냅니다.)

이를 사용하려면 문자열 안에 CSV 파일을 생성 한 다음이를 호출하여 $ output의 CSV 내용과 브라우저가 $ filename으로 저장할 파일 이름을 전달합니다.

저는 원래 Ubercart가 보안 다운로드를 처리하는 방식에서이 논리를 얻었습니다.

2
Blake Senftner