2012-06-06 26 views
0

以下是我想要做的: 如果用戶單擊鏈接(或圖像),則會動態創建文件,並且用戶可以下載文件。Drupal - 從鏈接調用函數但不創建新頁面

一個想法是創建一個鏈接l(),它調用處理文件的菜單項。但是,該方法將創建一個新頁面 - 這不是我想要的。我想讓用戶看到他們只是從文件列表中下載一個文件(如果他們願意的話,他們可以進入下一個文件鏈接)

這個問題已經在drupal論壇上被詢問沒有回答: http://drupal.org/node/427866

我認爲這是一個簡單的命題,但沒有答案。

謝謝!

回答

0

我不明白HTML的標題,但這裏的基本想法是更改標題,並跟隨用戶下載的文件。鏈接(任何你想要的,可以鏈接到一個函數,或使用l())將導致執行某個函數;在該函數中,它會調用php函數header()在drupal執行任何操作之前將正確的頭返回給瀏覽器,然後是您希望用戶下載的文件;之後,你可以調用die()函數來完成執行。

對於瀏覽器,它會開始下載文件。但是對於你需要放在header()函數中的東西,我也不太確定,你可以進一步搜索這個。

更新:這裏是我用於爲用戶提供一個Excel可讀的文件下載代碼:

function download_as_excel($header, $rows, $filename = 'result.xls',$pre_content = "",$post_content = "") 
{ 
    //Export the table to MS Excel. 
    header('Content-type: application/vnd.ms-excel; charset=UTF-8'); 
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
    $output = '<html>'; 
    $output .= '<head><meta http-equiv=Content-Type content="text/html; charset=utf-8"></head>'; 
    $output .= '<body>'; 
    $output .= $pre_content; 
    $output .= theme('table', array('header' => $header, 'rows' => $rows)); 
    $output .= $post_content; 
    $output .= "</body></html>"; 
    print $output; 
    exit; 
} 
+0

你能更具體嗯...可能是工作,如果位置前鏈接被採取?死亡()會回到最後一頁?應該使用header(「Location:...」)嗎?或標題(「Content-Disposition:attachment;」)? – bopjazz

+0

我已更新我的評論,以包含我們用作示例的代碼;因爲瀏覽器已將下載文件作爲鏈接返回的內容,因此以後不會重定向到其他頁面(意思是:保持在同一頁面中) – songyy

+0

工作正常!哇!謝謝。我只能使用以下內容,請參閱我的回覆 print $ output; – bopjazz