从 Silverstripe 文件选项卡中列出前 3 个最新的 pdf

List top 3 most recent pdfs from Silverstripe Files tab

我是 Silverstripe 的新手,不过,我有一些不错的 PHP 经验。

现在,我正在努力获取我在 Silverstripe CMS 的“文件”选项卡下上传的 PDF 文件。

我将它们存储在一个名为 "Newsletters," 的文件夹中,我想获取每个文件的标题(这样我就可以创建一个可下载的超链接)和上传日期。到目前为止,我已经找到了关于如何上传文件的教程,并且我找到了这段用于从上传目录中获取图像的代码:

 function getFrontPageImages() {
      $folder = DataObject::get_one("Folder", "Filename = 'assets/myfrontpageimages'");
      return $folder ? DataObject::get("Image", "ParentID = '{$folder->ID}'") : false;
    }

但这并不是我想要的,考虑到我想要获得 3 个 PDF。有没有关于如何做到这一点的好例子?

我猜它类似于 $[something].Title$[something].LastEdited(或类似的东西)?

在你的PHP(Page_Controller或子class,通常):

<?php
class Page_Controller extends ContentController {
    public function FeaturedPDFs() {
        $folder = Folder::get()->filter('Filename', 'assets/featured-pdfs')->first();
        // Could do $folder->Children()->sort('Filename', 'ASC') to sort by filename, here I'm going to show the 3 most recently edited files
        return $folder
            ->Children()
            ->sort('LastEdited', 'DESC')
            ->limit(3);
    }
}
?>

在您的模板中(例如,在本例中,Page.ss):

<% if $FeaturedPDFs %>
    <ul>
        <% loop $FeaturedPDFs %>
            <%-- Here, you're in the scope of a `File` object --%>
            <li>$Title.XML (last edited on $LastEdited.Format('Y-m-d') at $LastEdited.Time)</li>
        <% end_loop %>
    <ul>
<% end_if %>