系统在数据库中找不到与当前 URL 参数(通常是 page)匹配的有效分页内容。
下面我将从原因分析和解决方案两个方面,为您详细拆解这个问题。
问题原因分析
导致这个错误的原因多种多样,可以归结为以下几大类:
URL 参数问题 (最常见)
这是最直接的原因,DedeCMS 通过解析 URL 中的 page 数字来判断当前是第几页,如果这个参数有问题,就会报错。
- 参数为 0 或负数:URL 中的
page值是0或-1等,而分页通常从1开始。 - 参数为非数字:URL 中的
page值是字母或特殊字符,如page=abc。 - 参数超出总页数:总共只有 5 页,但 URL 请求的是
page=6或更高。
数据库中没有对应内容
即使 URL 参数正确,但如果数据库里根本没有数据,分页也无从谈起。
- 栏目为空:你正在分页的栏目或频道,其
dede_arctype表中没有任何文章(dede_archives表)。 - 模型问题:你使用的模型(如文章、图集等)下没有发布任何内容。
- SQL 查询错误:自定义列表或频道页面的 SQL 查询语句有误,导致查询结果为空。
模板文件问题的“外壳”,如果外壳本身有问题,内容也无法正确显示。
- 分页标签错误:模板中使用了错误的分页标签,或者标签的参数不正确。
- 循环标签缺少
else判断:在{dede:list}或{dedarclist}循环标签外,没有加上else条件来判断“如果没有内容时显示什么”,当没有内容时,系统找不到渲染逻辑,就可能报错。 - 模板文件损坏或缺失:相关的列表页模板文件(如
list_article.htm)不存在或内容被破坏。
系统或缓存问题
- 缓存干扰:DedeCMS 有强大的缓存机制,有时旧的缓存文件会导致系统读取到错误的信息,从而产生这个报错。
- 伪静态规则问题:如果你开启了伪静态,服务器的伪静态规则(如
.htaccess)可能配置不当,导致分页 URL 无法被正确解析到list.php。
解决方案排查步骤
请按照以下步骤,由简到繁进行排查,通常能快速定位问题。
第 1 步:检查 URL 是否正确
这是最简单的一步,直接观察浏览器地址栏的 URL。
- 检查
page值:确认page后面的数字是否为正整数,并且没有超过总页数。- 错误示例:
http://www.yoursite.com/plus/list-1-0.html(page=0) - 错误示例:
http://www.yoursite.com/plus/list-1-999.html(page=999,超出范围) - 正确示例:
http://www.yoursite.com/plus/list-1-1.html,http://www.yoursite.com/plus/list-1-2.html
- 错误示例:
- 如何修正:URL 是手动输入或外部链接错误,请修正为正确的分页链接,正常的分页链接是通过模板中的
[page]标签自动生成的,通常不会错。
第 2 步:检查栏目/频道是否有内容
URL 正确,那就要看看后台里到底有没有东西。
- 登录 DedeCMS 后台。
- 进入「内容管理 -> 普通文章」或「栏目管理」。
- 检查你报错的那个栏目(ID=1),看里面是否已经发布了文章。
- 如果没有,请先发布几篇文章,然后刷新前台页面看是否解决。
第 3 步:清理系统缓存
这是最常用且有效的“万能”修复方法之一。
- 登录 DedeCMS 后台。
- 进入「系统 -> SQL命令行工具」。
- 在输入框中执行以下命令(可以一条一条执行):
DELETE FROM `dede_arccache`;
或者直接在后台找到「系统 -> 系统设置 -> 清除系统缓存」,点击执行。
- 清理完毕后,刷新前台页面。
第 4 步:检查并修改模板文件
这是技术性较强的一步,需要你有一定的 HTML 和 DedeCMS 标签基础。
-
通过 FTP 或主机文件管理器,找到你的模板文件,通常位于
/templets/你的模板名称/目录下,list_article.htm。 -
用代码编辑器(如 VS Code, Sublime Text)打开这个文件。
-
检查分页标签:确保你的列表循环和分页标签是正确的,一个标准的列表页模板结构如下:
<h1>{dede:field.typename/}</h1> <!-- 列表内容开始 --> <ul> {dede:list pagesize='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list} </ul> <!-- 重点:添加 else 判断 --> {dede:else /} <p>抱歉,该栏目下暂无任何内容!</p> {/dede:list} <!-- 分页条开始 --> <div class="dede_pages"> <ul class="pagelist"> {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/} </ul> </div> <!-- 分页条结束 -->关键点:
{dede:list}和{/dede:list}之间是你的文章列表。{dede:else /}是核心!当{dede:list}查询不到任何内容时,就会执行else里的代码,显示“暂无内容”,而不是报错。{dede:pagelist}是生成分页导航的标签。
-
保存修改后的模板文件,然后刷新前台。
第 5 步:检查伪静态规则
如果你的网站开启了伪静态,请检查。
- 检查后台设置:进入「系统 -> 系统设置 -> 核心设置」,确认“是否使用伪静态”选项为“是”。
- 检查服务器配置:
- Apache:检查网站根目录下的
.htaccess文件,确保其中包含 DedeCMS 的伪静态规则(官方默认规则通常没问题)。 - Nginx:检查 Nginx 的配置文件(通常在
nginx.conf或站点配置文件中),确保包含了 DedeCMS 的伪静态规则,规则通常类似这样:rewrite "^/plus/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last; rewrite "^/plus/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 last; rewrite "^/plus/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?aid=$1&PageNo=$2 last;
- Apache:检查网站根目录下的
- 修改配置后,需要重启 Nginx/Apache 服务才能生效。
第 6 步:检查自定义列表的 SQL 语句
如果错误出现在“自定义列表”页面,那么问题几乎可以肯定是 SQL 语句。
- 进入后台「核心 -> 频道模型 -> 自定义表单」。
- 找到你报错的自定义列表,检查其“列表内容模板”和“附加SQL条件”。
- 仔细检查 SQL 语句是否有语法错误,或者
where条件过于严格,导致查询结果为空,可以先去掉一些限制条件,看是否能正常显示。
总结与快速排查清单
遇到“Dede 没有检索到对应分页”时,按以下顺序快速排查:
- [最简单] 检查浏览器 URL 中的
page参数是否为 0、负数或过大。 - [最常见] 清理后台缓存:进入「系统」->「SQL命令行工具」,执行
DELETE FROM dede_arccache;。 - [必做] 检查栏目是否有内容:去后台确认该栏目下已发布文章。
- [技术活] 检查模板文件:确保
{dede:list}标签内有{dede:else /}判断。 - [高级] 检查伪静态规则或自定义列表的 SQL 语句。
按照这个流程,90% 以上的问题都能得到解决,如果问题依然存在,请提供具体的错误截图、URL 和栏目 ID,以便进一步分析。
