PHP博客,需要做一个好看的档案部分
所以!基本上,我有一个包含大量博客文章的数据库,这些文章都是按UNIX时间戳排序的,我需要的是一种方法,使这段代码在适当的时候吐出标题,这样它将输出如下内容: 2008 十一月 标题1-日期在此显示PHP博客,需要做一个好看的档案部分,php,blogs,archive,Php,Blogs,Archive,所以!基本上,我有一个包含大量博客文章的数据库,这些文章都是按UNIX时间戳排序的,我需要的是一种方法,使这段代码在适当的时候吐出标题,这样它将输出如下内容: 2008 十一月 标题1-日期在此显示 标题2-日期在这里 十二月 标题3-日期在此显示 2009 一月 标题4-日期在此显示 等等 这是我的代码,到目前为止,它一直工作到一年的比较,我仍然需要想出一个好方法,让它以合理的方式比较月份,这样一月确实在十二月之后,而不是一些可笑的第十三个月 [守则] <?php if ($
标题2-日期在这里 十二月 标题3-日期在此显示
2009 一月 标题4-日期在此显示
等等 这是我的代码,到目前为止,它一直工作到一年的比较,我仍然需要想出一个好方法,让它以合理的方式比较月份,这样一月确实在十二月之后,而不是一些可笑的第十三个月 [守则]
<?php
if ($db = new PDO('sqlite:./db/blog.sqlite3')) {
$stmt = $db->prepare("SELECT * FROM news ORDER BY date DESC");
if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$current_year = date("Y", $row[1]);
$current_month = date("m", $row[1]);
if ($current_year > $last_year) {
echo "<h1>" . $current_year . "</h1>";
$last_year = $current_year;
}
echo "<tr>";
echo "<td align='left'><a href='view_post.php?post_id=". $row[1] ."'>" . $row['0'] . " - " . date("Y-m-d, H:i:s", $row[1]) . "</a></td>";
echo "</tr>";
}
}
} else {
die($sqliteerror);
}
?>
使用unix时间戳,您可以执行以下操作(显然是伪代码)
我会尝试分两步完成这项工作,将数据库获取与显示/html逻辑分离,例如:
<?php
//snip
//make big array of archive
$archive = array();
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$year = date("Y", $row[1]);
$month = date("m", $row[1]);
if (!isset($archive[$year])) {
$archive[$year] = array();
}
if (!isset($archive[$year][$month])) {
$archive[$year][$month] = array();
}
$archive[$year][$month][] = $row;
}
//snip
//loop over array and display items
?>
<?php foreach ($achive as $year => $months): ?>
<h1><?php echo $year; ?></h1>
<?php foreach ($months as $month => $posts): ?>
<h2><?php echo $month; ?></h2>
<ul>
<?php foreach ($posts as $post): ?>
<li><?php echo $post[0]; ?> etc...</li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
<?php endforeach; ?>
- 等等
您应该按照SQL查询的相反顺序获取年份和月份。我还没有测试过这个,但它应该是模糊正确的。没问题,很抱歉这是伪代码,但我更喜欢让人们学习,而不是马上给他们完整的答案。不,事实上,这是最好的方法,因为它让我更容易适应我的代码。(例如,我用“while循环”代替“for循环”)很棒的东西,很棒的东西。
<?php
if ($db = new PDO('sqlite:./db/blog.sqlite3')) {
$stmt = $db->prepare("SELECT * FROM news ORDER BY date DESC");
if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$current_year = date("Y", $row[1]);
$current_month = date("n", $row[1]); # n instead of m
if ($current_year > $last_year) {
echo "<h1>" . $current_year . "</h1>";
echo "<h2>" . $current_month . "</h2>";
$last_year = $current_year;
$last_month = $current_month;
}
elseif ($current_month > $last_month) {
echo "<h2>" . $current_month . "</h2>";
$last_month = $current_month;
}
echo "<tr>";
echo "<td align='left'><a href='view_post.php?post_id=". $row[1] ."'>" . $row['0'] . " - " . date("Y-m-d, H:i:s", $row[1]) . "</a></td>";
echo "</tr>";
}
}
} else {
die($sqliteerror);
}
?>
<?php
if ($db = new PDO('sqlite:./db/blog.sqlite3')) {
$stmt = $db->prepare("SELECT * FROM news ORDER BY date DESC");
if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$current_year = date("Y", $row[1]);
$current_month = date("n", $row[1]); # n instead of m
if ($current_year > $last_year) {
echo "<h1>" . $current_year . "</h1>";
echo "<h2>" . $current_month . "</h2>";
$last_year = $current_year;
$last_month = $current_month;
}
elseif ($current_month > $last_month) {
echo "<h2>" . $current_month . "</h2>";
$last_month = $current_month;
}
echo "<tr>";
echo "<td align='left'><a href='view_post.php?post_id=". $row[1] ."'>" . $row['0'] . " - " . date("Y-m-d, H:i:s", $row[1]) . "</a></td>";
echo "</tr>";
}
}
} else {
die($sqliteerror);
}
?>