dimayakovlev.ru


Функция сортировки страниц по времени публикации в GetSimple CMS

В продолжении рассмотренной темы о группировке и фильтрации страниц в GetSimple CMS, при построении списка вывода, необходимо уделить внимание вопросу сортировки страниц по времени публикации для сохранения прямого или обратного хронологического порядка. В GetSimple CMS 3.3.x такая возможность не предусмотрена, поэтому я предлагаю воспользоваться следующей функцией.

/**
 * Sort Pages by Publication Date
 *
 * Return array of slugs sorted by pubDate field
 *
 * @param  array $slugs array of slugs
 * @param  integer $order sort order SORT_ASC or SORT_DESC. Default value is SORT_ASC
 * @return array sorted array of slugs
 */
function sort_pubdate($slugs, $order = SORT_ASC) {
  $sortable_array = array();
  foreach($slugs as $slug) {
    $sortable_array[$slug] = strtotime(returnPageField($slug, 'pubDate'));
  }
  switch ($order) {
    case SORT_ASC:
      asort($sortable_array, SORT_NUMERIC);
      break;
    case SORT_DESC:
      arsort($sortable_array, SORT_NUMERIC);
      break;
  }
  return array_keys($sortable_array);
}

Функция принимает два параметра:

  • $slugs - массив, содержащий адреса страниц (slugs), подлежащих сортировке;
  • $order - определяет порядок сортировки, принимает в качестве значения предопределённые константы SORT_ASC (значение по умолчанию) - сортировка в порядке возрастания, и SORT_DESC - сортировка в порядке убывания.

В качестве примера практического использования функции, предлагаю рассмотреть сортировку по дате публикации и вывод объединённого списка дочерних страниц для разделов blog и news веб-сайта.

<?php
  $collection = array_merge(getChildren('blog'), getChildren('news'));
  $collection = sort_pubdate($collection);
  echo '<ul>';
  foreach ($collection as $item) {
    $parent = returnPageField($item, 'parent');
    $title = returnPageField($item, 'title');
    $date = lngDate(returnPageField($item, 'pubDate'));
    $url = find_url($item, $parent);
    echo '<li><a href="' . $url . '">' . $title . '</a> (' . $date . ')</li>';
  }
  echo '</ul>';
?>

В заисимости от задачи, код предложенной функции можно разместить в файле functions.php текущей темы оформления веб-сайта, что позволит вызывать её в коде шаблонов оформления страниц, или непосредственно в компоненте, реализующем логику вывода отсортированного списка страниц.