Список 3 самых последних PDF-файлов на вкладке Silverstripe Files

Я новичок в Silverstripe, хотя у меня есть неплохой опыт работы с PHP.

Прямо сейчас я работаю над получением файлов PDF, которые я загрузил в Silverstripe CMS на вкладке «Файлы».

У меня они хранятся в папке под названием «Информационные бюллетени», и я хочу получить заголовок для каждого (чтобы я мог сделать с ним загружаемую гиперссылку) и дату загрузки. Пока что я нашел руководства по загрузке файлов и нашел этот фрагмент кода для получения изображения из каталога загрузки:

 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 (или что-то подобное)?


person Dejsa Cocan    schedule 02.04.2015    source источник
comment
Какую версию Silverstripe вы используете? Код, который вы вставили, кажется немного устаревшим (было в 2,4 раза), если вы используете 3.1, вам нужно сделать что-то вроде File :: get () - ›filter (), чтобы получить последние файлы. См. doc.silverstripe.org/en/developer_guides/model/ и doc.silverstripe.org/en/developer_guides/model/searchfilters   -  person wmk    schedule 02.04.2015
comment
Я использую Silverstripe 3.1. Пример, который я опубликовал выше, был взят из онлайн-форума, и я не был уверен, можно ли его еще использовать.   -  person Dejsa Cocan    schedule 02.04.2015


Ответы (1)


В вашем PHP (Page_Controller или подклассе, как правило):

<?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 %>
person Matt    schedule 03.04.2015
comment
Я попробовал это сделать, но когда я пытаюсь загрузить страницу, она полностью пуста. Удаление приведенного выше кода позволяет ему снова работать. Я не вижу ошибок в инструментах разработчика Chrome, но что-то должно быть не так. Хотя, похоже, это должно сработать. Я только изменил активы / избранные PDF-файлы на активы / информационные бюллетени. - person Dejsa Cocan; 03.04.2015
comment
Поцарапайте это - мне, наконец, удалось заставить его работать. В моей системе возникли некоторые проблемы с настройкой даты и времени. - person Dejsa Cocan; 03.04.2015