Typecho默认主题是不带有归档页功能的,网上提供很多教程提供了归档页的代码,本人也是当时受益于大家的分享而设置了归档页。
  近期发现,当相邻文章处于不同年份同一月份(如2018.12与2017.12,这种情况出现于正好一年都没有更新的情况),归档页此处便会出现排版错误。
  我们先查看原始网络代码(归档页核心代码):

$this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives);
$year=0; $mon=0;
$output = '<div id="archives">';
while($archives->next()):
    $year_tmp = date('Y',$archives->created);
    $mon_tmp = date('m',$archives->created);
    if ($mon != $mon_tmp && $mon > 0) $output .= '</ul></li>';
    if ($year != $year_tmp && $year > 0) $output .= '</ul></ul>';
    if ($year != $year_tmp) {
        $year = $year_tmp;
        $output .= '<h3>'. $year .' 年</h3><ul>'; //输出年份
    }
    if ($mon != $mon_tmp) {
        $mon = $mon_tmp;
        $output .= '<li><span>'. $mon .' 月</span><ul>'; //输出月份
    }
    $output .= '<li>'.date('d日: ',$archives->created).'<a href="'.$archives->permalink .'">'. $archives->title .'</a></li>'; //输出文章日期和标题
endwhile;
$output .= '</ul></li></ul></div>';
echo $output;

  分析:当出现上述情况时:

    if ($year != $year_tmp) {
        $year = $year_tmp;
        $output .= '<h3>'. $year .' 年</h3><ul>'; //输出年份
    }

  该段代码会因为年份不同,正常输出新的年份,然而:

    if ($mon != $mon_tmp) {
        $mon = $mon_tmp;
        $output .= '<li><span>'. $mon .' 月</span><ul>'; //输出月份
    }

  该段代码则会判断为同一月份,不输出该月份,出现临近年没有输出月份标签而错版。
  问题找到了,那么解决就简单了。在相邻文章年份判别的时候,若年份不同,则对月份初始值进行重新赋值,这样上段关于月份的代码就会正常输出月份。
  故主要是修改上述年份中的代码:

    if ($year != $year_tmp) {
        $year = $year_tmp;$mon=0; //此处对$mon变量重新赋值为0,即可解决
        $output .= '<h3>'. $year .' 年</h3><ul>'; //输出年份
    }

  同时,顺手删除上述核心代码中(网友分享中存在,此处已剔除)随意定义的变量:$i,$j,$m,$y。这些都是当时网友测试代码时使用的。

标签: none

评论已关闭