2012-06-06 34 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