Для вывода всех треков на отдельной странице потребуется доработать штатный функционал работы с треками.
1. Первым делом потребуется сообщить CMS о новой странице, добавив в файл
app/Config/RouterConfig.php
строку
['tracks_all', '/tracks/', 'Track::list']
, в которой
'/tracks/'
- относительный URL новой страницы,
'Track::list'
- название метода, который займется выгрузкой данных.
2. Далее нужно выгрузить и обработать данные из БД. Открыть файл
app/Controllers/Track.php
и после:
PHP:
public function index ($params) {
....
}
добавить:
PHP:
public function list ()
{
print('tracks');
}
Этот метод будет отвечать за обработку и вывод треков. Если все сделано правильно, на странице
/tracks/
появится сообщение
tracks
.
3. Следующим этапом добавим выгрузку треков из базы. Добавляем в созданный метод:
PHP:
$output_tracks = TrackModel::getAllFromOutput(0, 50);
$tracks = Utils::prepareTracksBeforeOutput($output_tracks);
print_r($tracks);
На новой странице появится список сохраненных треков.
4. Прикрепим шаблон. Данные выводятся корректно, остается придать им презентабельный вид. Обновим созданный метод:
PHP:
$output_tracks = TrackModel::getAllFromOutput(0, 50);
$tracks = Utils::prepareTracksBeforeOutput($output_tracks);
$this->addSeoTags('title', 'Все треки');
$this->addSeoTags('description', 'Все треки');
$this->addBreadcrumbs(['link' => null, 'title' => 'Все треки']);
$this->addSeoTags('title', 'Все треки');
$this->addSeoTags('description', 'Все треки');
$this->addBreadcrumbs(['link' => null, 'title' => 'Все треки']);
$this->setResults('tracks', $tracks);
$data = [];
$this->loadViews($data, 'tracks');
За представление данных будет отвечать файл шаблона
tracks.tpl
. Его нужно создать в каталоге шаблона. Содержимое файла:
HTML:
{strip}
{include file="modules/header.tpl"}
<main class="soundapp__content pajax-content">
<div class="content _has_breadcrumbs">
{include file="modules/breadcrumbs.tpl"}
<h1 class="content__title">Все треки</h1>
{include file="track-list.tpl"}
</div>
</main>
{include file="modules/footer.tpl"}
{/strip}
В примере используется дефолтный шаблон
soundapp
. В Вашем шаблоне структура данных может отличаться.
Результатом работы станет готовая страница со списком треков:
5. Остается настроить пагинацию списка треков. Вернемся с файлу
app/Controllers/Track.php
и обновим метод list:
PHP:
public function list ($params)
{
// Получение номера текущей страницы из URL
$page = isset($params['page']) ? (intval($params['page'])) : 1;
// Кол-во треков на 1 страницу
$limit = 50;
// Вычисление необходимого смещения пагинации
$offset = $page ? $page * $limit - $limit : 0;
// Выгрузка и обработка треков
$output_tracks = TrackModel::getAllFromOutput($offset, $limit);
$tracks = Utils::prepareTracksBeforeOutput($output_tracks);
$count = TrackModel::counts();
// Подготовка данных к выводу
$this->addSeoTags('title', 'Все треки');
$this->addSeoTags('description', 'Все треки');
$this->addBreadcrumbs(['link' => null, 'title' => 'Все треки']);
$data = [
'count' => $count,
'pagination' => $this->makePagination($count, $limit, $page, 'tracks'),
'results' => [
'tracks' => $tracks,
'hasNextPage' => false
]
];
$this->loadViews($data, 'tracks');
}
Новые строки я обозначил комментарием. В них мы получаем номер текущей страницы из URL и генерируем данные пагинации.
Так же, вернемся в файл
app/Config/RouterConfig.php
и добавим строку
['tracks_page', '/tracks/(page:int)', 'Track::list'],
. Эта строка подскажет скрипту как правильно работать с пагинацией.
Остается только подключить файл шаблона пагинации в файле
tracks.tpl
:
HTML:
{strip}
{include file="modules/header.tpl"}
<main class="soundapp__content pajax-content">
<div class="content _has_breadcrumbs">
{include file="modules/breadcrumbs.tpl"}
<h1 class="content__title">Все треки</h1>
{include file="track-list.tpl"}
{include file="modules/pagination.tpl"}
</div>
</main>
{include file="modules/footer.tpl"}
{/strip}
Готово! Результатом работ станет новая страница со списком всех треков и пагинацией. Данная инструкция универсальна и подходит для доработок любых других ресурсов.