Группировка и фильтрация вывода страниц по году публикации в GetSimple CMS
Ранее я уже рассматривал способ вывода списка дочерних страниц в GetSimple CMS, теперь отвечаю на расширенный вопрос, о том, как сгруппировать или отфильтровать вывод списка дочерних страниц по году публикации.
Такая группировка страниц может быть полезна, например, при создании архива блога на основе GetSimple CMS, не применяя дополнительных плагинов.
<?php
$page = get_page_slug(false);
$collection = array();
$children = getChildrenMulti($page, array('pubDate'));
foreach ($children as $child) {
$timestamp = strtotime($child['pubDate']);
$year = date('Y', $timestamp);
$collection[$year][] = $child['url'];
}
krsort($collection);
foreach($collection as $year => $slugs) {
echo '<h2>' . $year . '</h2>';
echo '<ul>';
foreach($slugs as $slug) {
$url = find_url($slug, $page);
$title = returnPageField($slug, 'title');
echo '<li><a href="' . $url . '">' . $title . '</a></li>';
}
echo '</ul>';
}
?>
Аналогично можно не только вывести полный список страниц, но и реализовать отфильтрованный вывод, передавая требуемый год в качестве GET параметра в адресе страницы, например: http://dimayakovlev.ru/blog/?year=2018.
<?php
$filter = filter_input(INPUT_GET, 'year', FILTER_VALIDATE_INT);
if ($filter) {
$page = get_page_slug(false);
$children = getChildrenMulti($page, array('pubDate'));
$collection = array();
foreach ($children as $child) {
$timestamp = strtotime($child['pubDate']);
$year = date('Y', $timestamp);
if ($year == $filter) {
$collection[] = $child['url'];
}
}
if ($collection) {
echo '<h2>' . $filter . '</h2>';
echo '<ul>';
foreach($collection as $item) {
$url = find_url($item, $page);
$title = returnPageField($item, 'title');
echo '<li><a href="' . $url . '">' . $title . '</a></li>';
}
echo '</ul>';
}
}
?>
Работа приведённых фрагментов кода протестирована с GetSimple CMS 3.3.13.