Функция сортировки страниц по времени публикации в 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 текущей темы оформления веб-сайта, что позволит вызывать её в коде шаблонов оформления страниц, или непосредственно в компоненте, реализующем логику вывода отсортированного списка страниц.