Есть 2 способа
- Вы создаете структуру в Smarty
- Вы группируете результаты по БД по годам
Первый пошел бы
$rows = $db->query('select year, title from news');
$smarty->assign('news', $rows);
// smarty code
{if count($rows) > 0}
{assign var=lastYear value=0}
<ul><li>
{foreach name=foo from=$rows item=item}
{if $smarty.foreach.foo.first}
{$row.year}<ul>
{elseif $lastYear != $row.year}
</ul></li><li>{$row.year}<ul>
{/if}
{assign var=lastYear value=$row.year}
<li>{$row.title}</li>
{/foreach}
</ul></li></ul>
{/if}
Другой - сгруппировать значения в php:
$rows = $db->query('select year, title from news');
$news = array();
foreach($rows as $row) {
$news[$row['year']][] = $row['title'];
}
$smarty->assign('news', $news);
// smarty code
<ul>
{foreach from=news key=year item=rows}
<li>{$year}<ul>
{foreach from=$rows item=row}
<li>{$row}</li>
{/foreach}
</ul></li>
{/foreach}
</ul>
Выбор за вами