在SilverStripe导航中设置链接以自动下载PDF文件
我有一些我正在为SilverStripe中的PDF下载页面类型编写的代码,它允许人们将PDF文件上传到后端。然后,该PDF文件作为链接被读取到顶部导航中,单击该链接时,该链接将自动下载PDF文件 我已经设置了大部分代码:在SilverStripe导航中设置链接以自动下载PDF文件,pdf,silverstripe,Pdf,Silverstripe,我有一些我正在为SilverStripe中的PDF下载页面类型编写的代码,它允许人们将PDF文件上传到后端。然后,该PDF文件作为链接被读取到顶部导航中,单击该链接时,该链接将自动下载PDF文件 我已经设置了大部分代码: <?php class PDFTemplate extends Page { public static $db = array( ); public static $has_one = array( 'PDFFile' =&g
<?php
class PDFTemplate extends Page {
public static $db = array(
);
public static $has_one = array(
'PDFFile' => 'File'
);
public static $has_many = array(
);
public function Link() {
return '/home/download?ID=' . $this->ID;
}
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Main", new UploadField('PDFFile', "PDF File"), "Content");
return $fields;
}
}
class PDFTemplate_Controller extends Page_Controller {
public static $allowed_actions = array (
'download'
);
public function init() {
parent::init();
}
public function download() {
$id = $_GET['ID'];
$obj = DataObject::get_by_id('PDFTemplate', $id);
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;');
header('Pragma: no-cache');
return readfile("");
}
}
您现在请求的是一个PDFTemplate
对象,而不是文件
对象,因此这是一个问题-但是您不需要向该页面传递ID来下载它,因为该页面已经有了该信息
如果您不需要隐藏有问题的PDF的直接URL,这样做可能会容易得多,并提供更好的性能:
删除download()和Link()函数
在菜单的.ss模板中执行:
很抱歉等待,但我确实尝试过,它似乎起作用了。谢谢