Я сейчас создаю какой-то видеоканал на основе созданного мною расширения. Он состоит из видео и плейлиста, который содержит видео (очевидно). Я должен создать страницу, которая содержит список видео и плейлист по категориям. Вы также можете отсортировать эти элементы по дате. Наконец, страница разбита на страницы с бесконечной прокруткой, которая должна загружать элементы 21 на 21. Для этого я создал в репозиториях Video и Playlist функцию «findByCategory», которая очень проста:
$query = $this->createQuery();
return $query->matching($query->equals('categorie.uid',$categoryUid))->execute()->toArray();
Once Я запросил нужные мне элементы, объединяю их в один массив и делаю сортировку. Вот мое действие шоу контроллера:
if ($this->request->hasArgument('sort'))
$sort = $this->request->getArgument('sort');
else
$sort = 'antechrono';
//Get videos in repositories
$videos = $this->videoRepository->findByCategorie($categorie->getUid());
$playlists = $this->playlistRepository->findByCategorie($categorie->getUid());
//Merging arrays then sort it
if ($videos && $playlists)
$result = array_merge($videos, $playlists);
else if ($videos)
$result = $videos;
else if ($playlists)
$result = $playlists;
if ($sort == "chrono")
usort($result, array($this, "sortChrono"));
else if ($sort == "antechrono" || $sort == null)
{
usort($result, array($this, "sortAnteChrono"));
$sort="antechrono";
}
$this->view->assignMultiple(array('categorie' => $categorie, 'list' => $result, 'sort' => $sort));
Вот мое представление:
<f:widget.paginate objects="{list}" as="paginatedList" configuration="{addQueryString: 'true', addQueryStringMethod: 'GET,POST', itemsPerPage: 21}">
<div class="videos row">
<f:for each="{paginatedList}" as="element">
<f:render partial="Show/ItemCat" arguments="{item: element}"/>
</f:for>
</div>
</f:widget.paginate>
Частичный рендер показывает материал, включая изображение, используемое в качестве обложки. Так что мне нужно по крайней мере это отношение в представлении.
Это прекрасно работает и показывает только элементы из запрошенной категории. К сожалению, у меня огромная проблема с производительностью: я попытался показать категорию, которая содержит более 3000 записей, и загрузка занимает около одной минуты. Это немного долго.
Посредством f: отладки моей переменной списка, я вижу, что она содержит все записи, даже через нее, не должно иметь место (в этом суть разбиения на страницы ...). Итак, первый вопрос: есть ли что-то неправильное в том, как я сделал свою нумерацию страниц?
Я попытался упростить свои запросы, включив функцию rawQuery ($ query-> execute (true)): я стал лучше производительность, но я не могу получить ссылку на изображения (на мой взгляд, я получаю 1 или 0, но не UID изображения ...). Второй вопрос: есть ли способ решить эту проблему?
Надеюсь, мое описание достаточно ясное. Спасибо за вашу помощь: -)