dimayakovlev.ru


Группировка и фильтрация вывода страниц по году публикации в 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.