栏目页生成数量显示“999+”,实际却只有几篇文章
报错现象:
后台“生成-更新栏目页”时,显示“生成栏目页:35/35”,但FTP里一看,每个栏目的HTML文件却多出几十个空壳,或者数量对不上,更诡异的是,有些栏目明明只有5篇文章,却生成了50个页面。
原因分析:
这多半是栏目页分页参数与文章列表总数不一致导致的,织梦的栏目页(list)默认按每页文章数(list_articlesize)分页,但系统在生成时读取的是arctiny临时表的数据,而非审核后的正式表,如果后台有大量未审核、或处于“待审核”状态的草稿文章,它们会被计入分页总数,导致系统误判需要生成更多分页。
织梦CMS栏目页生成数量虚标?老运维手把手拆解这6个高频坑
解决步骤:
- 登录后台,点击内容-所有文章,筛选“状态:待审核”,批量删除或审核这些草稿。
- 执行SQL清理:后台系统-SQL命令行工具,运行以下指令(修改前缀
dede_为你的实际前缀):DELETE FROM `dede_arctiny` WHERE `arcrank` = -1;
- 重新生成栏目页:生成-更新栏目页,勾选“仅更新有内容的栏目”,并清空缓存(后台-系统-系统缓存清理)。
- 若仍无效,检查系统-系统基本参数-性能选项里的“列表最大分页数”,改为
200,避免分页上限被撑爆。
栏目页生成数量正确,但前台访问却报“该页面不存在”
报错现象:
后台显示生成了12个页面,但浏览器访问/list/2.html正常,访问/list/2_3.html(第三页)却直接404,FTP里能看到list_2_3.html文件确实存在。
原因分析:
这是伪静态或动态路径与生成规则不匹配的经典问题,你用的是“纯静态”模式,但栏目页的分页规则被改成了动态参数(如?tid=2&Page=3),或者服务器Nginx/Apache的重写规则未包含二级分页的后缀。
解决步骤:
- 检查后台系统-系统基本参数-核心设置,确认“URL伪静态”为禁用,且“栏目页列表样式”选择
list_2_3.html这种带下划线格式。 - 打开
/include/arc.listview.class.php,搜索MakeList,确保$cfg_rewrite为N(即非伪静态模式)。 - 若是Nginx,检查
nginx.conf中是否有:location /list { if (!-e $request_filename) { rewrite ^/list/(.*)\.html$ /list.php?tid=$1 last; } }但更推荐直接用织梦后台的“生成-更新栏目页”重新生成,然后全站HTML清理(删除所有
list_*.html),再重新生成一次。 - 若还不通,直接改用“动态页”模式:后台-生成-更新系统-“生成选项”里勾选“使用动态页”,前台访问变为
/list.php?tid=2&TotalResult=12&PageNo=3,再通过伪静态规则转换。
栏目页生成数量为0,且后台报“未生成任何页面”
报错现象:
点击“生成栏目页”后,进度条飞快跑完,但显示“本次生成0个页面”,栏目列表里确实有200篇文章。
原因分析:
大概率是栏目绑定的模板文件缺失或语法错误,织梦在生成时若无法加载模板(如list_article.htm不存在),会静默放弃该栏目。
解决步骤:
- 后台模板-默认模板管理,找到“列表模板”对应的
.htm文件,确认文件名与栏目设置中“列表模板”完全一致(默认list_article.htm)。 - 用记事本打开该模板,检查是否有
{dede:list}标签,且闭合标签为{/dede:list},若标签错误,改好后重新生成。 - 若模板存在,但生成仍为0,临时生成一个最简单的模板:新建
test.htm仅写[field:title/],然后到栏目设置里把列表模板改为test.htm,重新生成。 - 生成成功后,再检查原模板中的PHP代码(
<?php ?>),确认没有语法错误或exit语句。
栏目页生成数量时多时少,每次结果都不一样
报错现象:
同一栏目,第一次生成10个页面,第二次变成了8个,第三次又是12个,没有修改文章,但数量飘忽不定。
原因分析:
这是数据库表碎片化或索引失效导致的,织梦执行SELECT COUNT(*)获取文章总数时,若dede_archives表碎片过多,会返回不准确的值。
解决步骤:
- 登录phpMyAdmin,选中织梦数据库,点击“修复表”和“优化表”,对
dede_archives、dede_arctiny、dede_article三个表执行操作。 - 更新统计数据:后台系统-数据库备份/还原里,执行“累计栏目文章数”或“更新count值”,也可以在SQL命令行执行:
UPDATE `dede_archives` SET `mid` = 1; -- 仅为占位,实际是重建统计
- 修改
/include/inc_functions.php中的GetTotalArc函数,临时改成直接读取dede_archives表并加索引:ALTER TABLE `dede_archives` ADD INDEX (`typeid`);
- 清理缓存后重新生成,并关闭后台“性能优化”中的“动态缓存”选项。
栏目页生成时卡死,进度条不动,CPU占用100%
报错现象:
点击生成后,浏览器一直转圈,服务器负载飙升,只能重启PHP进程才能恢复,生成数量永远停在“第3个页面”。
原因分析:
死循环或内存溢出,栏目模板中用了{dede:include}嵌套调用其他栏目,或者文章列表里包含了自身栏目(循环引用),导致织梦递归解析。
解决步骤:
- 查看
/data/admin/下的日志文件,找到生成中断时最后一个$tid值。 - 临时在
/include/arc.listview.class.php中,在MakeList()函数开头加入:if ( $this->TypeID > 1000 ) exit('死循环保护'); - 检查该栏目模板,删除
{dede:include file="xxx.htm"}里的文件路径,确保不被循环调用。 - 修改PHP内存限制:编辑
php.ini,设置memory_limit = 512M,并把max_execution_time = 300。 - 若还是卡死,用SQL强制跳过问题数据:
UPDATE `dede_archives` SET `arcrank` = 0 WHERE `arcrank` = -1;
栏目页生成数量正确,但新文章发布后不更新数量
报错现象:
一篇文章发布成功,后台文章数+1,但栏目页生成数量还是老样子,必须手动点“更新栏目页”才变。
原因分析:
织梦的makehtml_list默认只在“更新栏目”时触发,若不勾选“自动生成栏目页”,系统不会主动刷新栏目页HTML,另外可能是发布文章时的“生成设置”没勾选“更新栏目页”。
解决步骤:
- 后台系统-系统基本参数-性能选项,找到“发布文章后自动生成”的选项,全部勾选“栏目页”和“主页”。
- 检查后台内容-发布文章页面,右侧“生成选项”是否勾选了“更新栏目页”(默认是“仅生成文档”)。
- 修改数据库逻辑:打开
/member/inc/inc_batchup.php,找到AfterAddArticle()函数,在末尾加入:require_once(DEDEINC."/arc.listview.class.php"); $lv = new ListView($typeid, 0); $lv->MakeHtml();
- 如果不想修改代码,用计划任务:后台-系统-计划任务,添加一个每隔10分钟执行
/dede/makehtml_list.php?tid=0的任务,强制更新所有栏目页。
最后说句实在话: 织梦栏目页数量错误,九成以上都出在“临时表数据污染”和“模板标签不规范”上,按上面的步骤排查,比不假思索重装系统靠谱得多,记住一条铁律:改任何文件前,先备份,当你被折腾得头皮发麻时,不妨喝口茶,回头看看是不是哪篇文章的发布时间是未来的——这也能让织梦癫狂。



发表评论