Drupal - 从Link调用函数但不创建新页面

时间:2012-06-06 17:30:06

标签: drupal drupal-7

这就是我想要做的事情: 如果用户单击链接(或图像),则会动态创建文件,用户可以下载该文件。

一个想法是创建一个链接l(),它调用一个处理文件的菜单项。但是,该方法将创建一个新页面 - 这不是我想要的。我希望它向用户显示他们只是从文件列表中下载文件(如果他们愿意,他们可以转到下一个文件链接)

这个问题在drupal论坛上被问到没有答案: http://drupal.org/node/427866

我认为这是一个简单的命题,但还没有答案。

谢谢!

1 个答案:

答案 0 :(得分: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;
}