遇到一个很有意思的错误,当然之所以有意思是因为这个问题有了答案,起因是这样的,在“theme.abddb.com”的测试站点上愉快的写着主题模块,实现了按目录列表之后,想把文章列表给加上,因为主站有现成的文章列表+分页器代码,本着拿来就用的精神,直接用在了测试站点上。然而点击任意文章的时候,就出现了这样一个错误。
Argument 1 passed to Widget_Abstract_Contents::
size() must be an instance of Typecho_Db_Query, null given,
called in /usr/share/nginx/html/theme/var/Widget/Archive.php on line 565
删除掉新添加的模块后,点击又变正常了。重新添加后问题当然毫无意外的重复出现,百度了一下同类错误,CSDN上有一位朋友说这个问题与分页器相关,于是把之前“文章列表+分页器”的代码拆分,删除掉了分页器的代码:
<nav class="nav-pagination">
<?php $this->pageNav('<', '>', 1, '...',
array('wrapTag' => 'ul', 'wrapClass' => 'pagination-list', 'itemTag' => 'li', 'textTag' => 'a', 'currentClass' => 'pagination-active', 'prevClass' => 'pagination-prev', 'nextClass' => 'pagination-next')); ?>
</nav>
问题居然就解决了,恩,那就不用分页器好了......但是不对啊,这个模块好歹已经寂寞而稳定的在主站跑了一年多了啊。认真对照了一下主站与分站的模板文件,发现主站多了一个“post.php”文件。
post.php
在wordpress中,用于单篇文章展示的页面是“single.php”,如果主题没有这个文件的话,主题会退求其次,用“index.php”这个模板来套现,在Typecho中也是一样的逻辑,在没有这个“post.php”文件的时候,用“index.php”这个模板来套现。
奇妙的分页器
博主的测试站就遇到了这样的问题,整理主题的时候缺什么写什么,因为暂时没有写到单篇文章页,所以也没有添加这个“post.php”文件,在没有加分页器之前,“index.php”一直很尽职尽责的实现代替功能,但加了分页器之后,这个代替逻辑似乎就出了故障。
解决方案
直接在主题里添加了一个空白的“post.php”文件,链接就能够正常跳转了,因为文件里暂时没有写内容,所以是跳转到一个空白的页面。如果亲也遇到了相似的问题,可以检查一下主题文件中是否缺少几个相关的可被代替但又不是一直可被代替的文件。