Общая логика может быть простой (наполовину псевдокод):
$posts = fetchFromDatabase('SELECT * FROM `posts` ORDER BY `posted` DESC');
// $posts = array(
// array('posted' => '2010-09-13 12:42:31', 'title' => ...)
// array(...)
// )
$currentYear = null;
foreach ($posts as $post) {
$year = date('Y', strtotime($post['posted']));
if ($year != $currentYear) {
printf('<h2>%s</h2>', $year);
$currentYear = $year;
}
echo $post['title'];
}
На словах:
- Извлечение всех сообщений для отображения из базы данных, отсортированной по дате.
- Отслеживайте "текущий год", который вы выводите.
- После ввода нового года выведите его, обновите текущий год.
Таким образом выводятся только годы существующих постов.