今天一位nodeseek的朋友向我指出,博客显示了29页,但点击29页时会报告找不到,实际只有28页。很感谢他的细心和报告,我自己都没注意到。
经过检查,typecho是在var/Widget/Archive.php的2233行的地方获得文章总条数: (也可能是在前面,不重要,反正是这个sql)
$this->countSql = clone $select;
经debug, countSql的判断条件是文章状态是 publish和private,非常奇怪,为什么会把private也加进去呢,但在实际显示文章的时候,就又不包含private的了?这样就导致显示有29页,实际只有28页。(因为博客里有几篇private的文章)。
一个可能的原因是,大概出发点是想让用户看到自己发布的private的文章(在下面判断了是否hasLogin),不过做到一半,开发者忘了list也需要private了吧。
因为typecho太久不更新了,我也懒得去深究也懒得提issue,就自己默默的改了吧。
要朔源比较麻烦,怕引出来别的问题,就简单补丁一下,就加一行:

        /** 仅输出文章 */
        $this->countSql = clone $select;

        $this->countSql->where('table.contents.status = ?', 'publish');   //加这行,只允许publish

标签: none

暂无评论

添加新评论