文章归档功能就类似本博客栏目的归档功能,归档列表布局是ul动态嵌套一些li,而li标签内容是由“文章发表年月+文章数”组成的,链接地址为博客的搜索页面,传递的参数为“文章所在年月”。
要实现这个功能,第一步就要先把文章表中所有文章的发表时间查询出来。
注:本处文章发表的时间数据库类型为整形,ar_queryByCase()方法为封装的Mysqli查询函数,函数返回值为结果数组。
/** * 本函数等价于执行SQL[article为文章表,ctime为文章发表时间字段] * select ctime from article order by ctime; * / $archive=$article->ar_queryByCase( array( array(), 'order'=>'order by ctime' ), array('$ctime') );
这样我们就可以得到类似于以下这样的结果数组。
Array ( [0] => Array ( [0] => 1348830449 ) [1] => Array ( [0] => 1348830477 ) [2] => Array ( [0] => 1348830507 ) )
第二步,为了更好的操作这些时间,需要使用date()函数对时间进行格式化,即要或得文章发表时间的年月。为了方便起见,这里用另一临时数组接收结果。
$temp=array(); foreach($archive as $key=>$val){ $temp[$key][0]=date('Y',$val[0]); $temp[$key][1]=date('m',$val[0]); $temp[$key][2]=1; } $archive=$temp;
这样的话,现在的结果数组就类似与这样的结构。
Array ( [0] => Array ( [0] => 2012 [1] => 09 [2] => 1 ) [1] => Array ( [0] => 2012 [1] => 09 [2] => 1 ) [2] => Array ( [0] => 2012 [1] => 09 [2] => 1 ) )
数组的第三个元素为文章所处月份发布文章的数目标量。我们用一个函数读这个结果数组进行处理,处理结果就是把数组的第一个、第二个元素相同,即文章发表的年、月相同的元素去掉,并修改发表数目这一标量的值。
function getFormatTime($arr=array()){ $result=array(); $y=0; $m=0; $key=0; foreach($arr as $index=>$value){ if($value{0}==$y&&$value{1}==$m){ $result[$key][2]++; }else{ $y=$value{0}; $m=$value{1}; $key=$index; $result[$key]=$value; } } return $result; } $archive=getFormatTime($archive);
这样再看一下处理后的数组元素,我们就可以得到类似于以下这样的结构。
Array ( [0] => Array ( [0] => 2012 [1] => 09 [2] => 3 ) )
这样数组处理部分已经搞定,就剩下最后一步,遍历这个数组,把内容显示在前台界面了,还是用ul和li布局,为了演示方便,就不给每个li的内容加链接了。
foreach($archive as $row){ echo '<li>'.$row{0}.'年'.$row{1}.'月('.$row{2}.')</li>'; }
这样,功能就基本完成了,不过,有一需要注意的地方,从数据库中查出来的结果数组必须有序,否则的话,就得不到正确结果,这一点请一定谨慎。