2017-10-19 99 views
1

我是SilverStripe報告的新手,但至今尚未找到與此特定問題相關的任何內容。SilverStripe 3.4自定義報告 - 將文件名設置爲自定義報告中的鏈接,以便於編輯

我有一個自定義報告,列出了網站中的所有圖像和文件在gridview中,但是,我想使它可以讓人們點擊文件名並轉到圖像或文件進行編輯,或者每個圖像和文件都有一個編輯按鈕。現在,如果有人想編輯文件或圖像,他們必須離開報告,進入文件選項卡,搜索所述文件/圖像,然後單擊進行編輯。這很枯燥。

我知道有一種方法可以根據cms/code/reports中的現有報告示例在報告中使頁面標題可點擊。但是我沒有看到任何與鏈接上傳的圖像和文件相關的內容。

有沒有辦法做到這一點?

這裏是我的自定義報表代碼:

<?php 

class CustomSideReport_ListofImagesAndFiles extends SS_Report { 

    // the name of the report 
    public function title() { 
     return 'All Images and Files'; 
    } 

    // what we want the report to return 
    public function sourceRecords($params = null) 
    { 
     return File::get() 
      ->sort('Title'); 
    } 

    // which fields on that object we want to show 
    public function columns() { 
     return array(
      "Title" => 'Image Title', 
      'Filename' => array(
       "Filename" => "Filename", 
       "link" => true, 
      ), 
     ); 
    } 

} 

使用"link" => true不工作 - 它試圖創建一個網頁鏈接,這是不對的。我試過了「編輯」和「CanEdit」。

回答

1

好吧,我從引用設置爲斷開鏈接想出了這個報告:

// which fields on that object we want to show 
public function columns() 
{ 
    $linkBase = singleton('CMSFileAddController')->Link('EditForm/field/File/item'); 
    $linkBaseEditLink = str_replace("/add","",$linkBase); 
    $fields = array(
     'Title' => 'Title', 
     'AbsoluteLink' => array(
      'title' => _t('CustomSideReport_ListofImagesAndFiles.ColumnFilename', 'Filename'), 
      'formatting' => function($value, $item) use ($linkBaseEditLink) { 
       return sprintf('<a href="%s">%s</a>', 
        Controller::join_links($linkBaseEditLink, $item->ID."/edit"), 
        strstr($value, '/assets/', false) 
       ); 
      } 
     ) 
    ); 

    return $fields; 
} 

我不知道這是不是有史以來最好的解決方案 - 它的作品,我不能找到與SilverStripe的這種報告創建相關的任何其他內容(我發現的所有內容都是爲了獲取Pages而不是圖片或文件)

我不得不做一些調整,因爲沒有CMSFileEditController就像有一個CMSPageEditController,但我用我所得到的。

如果有人有更好的解決方案,那麼請務必分享!