我正在尝试为我网站的博客开发一个简单的月度档案列表。我从数据库中提取了记录,现在我只需要相应地对它们进行排序,以便它们以这种方式出现:
<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。
最好的方法是什么?
答案 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";