Простой архив новостей с Smarty? - PullRequest
0 голосов
/ 18 декабря 2009

Существует простая таблица новостных статей: [ id | title | body | created ].

Как лучше всего создать простой архив новостей, используя smarty из полной коллекции статей, упорядоченных по дате создания?

В формате:

  • 2009
    • 12,11. Название
    • 03,03. Название
    • 01,01. Название
  • 2008
    • 11,12. Название
    • 04,03. Название
    • 02,03. Название
    • 16,02. Название
  • 2007
    • ...
    • ...

<ul>
    {foreach item=p from=$news}
    <li>{$p->created} {$p->title}</li>
    {/foreach}
</ul>

1 Ответ

0 голосов
/ 02 февраля 2010

Есть 2 способа

  1. Вы создаете структуру в Smarty
  2. Вы группируете результаты по БД по годам

Первый пошел бы

$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>

Выбор за вами

...