2015-09-14 3 views
2

У меня есть код, над которым я работаю, для типа страницы загрузки PDF в SilverStripe, что позволяет людям загружать PDF-файл на сервер. В свою очередь, этот PDF-файл затем считывается в верхнюю навигацию в виде ссылки, которая при нажатии автоматически загружает файл PDF.Настроить ссылку в навигации SilverStripe для автоматической загрузки PDF-файла

У меня есть большая часть кода создана:

<?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(""); 
    } 

} 

Но одна вещь, которую я застрял в данный момент, как получить URL-адрес файла PDF в команду ReadFile(). $ obj прямо сейчас устанавливается для получения идентификатора конкретного файла PDF для страницы .... так что мне нужно использовать что-то вроде $ obj.URL или $ obj.Link в readfile()?

ответ

1

Вы запрашиваете объект PDFTemplate на данный момент, а не объект File, так что это проблема, но вам не нужно передавать идентификатор на эту страницу, чтобы загрузить его в любом случае, поскольку страница уже имеет эту информацию.

Если вам не нужно, чтобы скрыть прямой адрес PDF в вопрос, что-то подобное может быть намного проще и предлагают более высокую производительность:

  1. Удаление загрузки() и Link() функции ,
  2. В .SS шаблон для меню сделать: <a <% if $PDFFile %>href="$PDFFile.Link" target="_blank"<% else %>href="$Link"<% end_if %>>
+0

Извините за ожидание, но я попробовать это, и это, кажется, работает. Благодаря! –