CodeIgniter - 每月档案

时间:2012-02-03 17:37:15

标签: codeigniter

我正在尝试为我网站的博客开发一个简单的月度档案列表。我从数据库中提取了记录,现在我只需要相应地对它们进行排序,以便它们以这种方式出现:

<h4>February '12</h4>

<ul>
    <li>Article 1</li>
    <li>Article 1</li>
    <li>Article 1</li>
</ul>

<h4>January '12</h4>

<ul>
    <li>Article 1</li>
    <li>Article 1</li>
    <li>Article 1</li>
</ul>

等等。

以下是来自我的控制器的拉取记录的功能:

public function get_archives()

{

    $query = $this->db->query("
        SELECT id, 
        title, 
        date_published 
        FROM blog_post 
        ORDER BY date_published DESC
    ");

    if ($query->num_rows() > 0)

    {

        return $query->result();

    }

}

然后我使用$ archives将这些结果传递给了我的视图。 date_published值返回时间戳,例如2012-01-13 18:39:53。

最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

由于您已经按照时间顺序对它们进行了排序,您可以在循环中遍历它们并在每次年度月份部分更改时打印标题。

示例:

// get list of blog-items
$archives = $this->get_archives();

$last_year_month = "";

// traverse items in foreach loop
foreach($archives as $d) {
  // extract year and month
  $year_month = substr($d["date_published"], 0, 7);

  // if year and month has changed
  if ($year_month != $last_year_month) {
    // if not the first heading, close previous UL
    if ($last_year_month != "") echo "</ul>\n";

    $last_year_month = $year_month;

    echo "<h4>" . date("M", mktime(0, 0, 0, intval(substr($year_month, 5, 2)) - 1, 1, 1970)) . " " . substr($year_month, 2, 2) . "</h4>\n";

    // opening UL for next list
    echo "<ul>\n";
  }

  echo "  <li>" . $d["title"] . "</li>\n";
}
// only print if an UL was opened
if ($last_year_month != "") echo "</ul>\n";