- 修改首页的调用逻辑:让首页在调用文章时,忽略
ismake(即iscommend) 这个置顶字段。 - 确保列表页不受影响:列表页的调用逻辑保持不变,依然可以正常显示置顶文章。
操作步骤
请务必在修改前 备份相关文件,以防出错。

第一步:修改首页文章列表调用文件 (index.php)
这个文件是网站首页的核心PHP文件,我们在这里修改它的数据库查询语句,过滤掉置顶文章。
-
找到文件: 使用FTP或文件管理器,登录您的网站服务器,找到并打开
/dede/目录下的index.php文件。 -
定位代码: 在
index.php文件中,找到获取文章列表的核心SQL查询语句,通常在文件中下部,类似这样的代码块:// ... 其他代码 ... $artlist = GetArtList($typeid, $row, $titlelen, $infolen, $imgwidth, $imgheight, $typeids, $order, $keyword, $channelid, $innertext, $aid, $lencord, $arcid, $mtype, $etime, $typeid, $flag, $ismake, $imglink, $pageno, $setpages, $orderby, $innertext, $aid, $lencord, $arcid, $mtype, $etime, $typeid, $flag, $ismake, $imglink, $pageno, $setpages, $orderby); // ... 其他代码 ...
或者更直接地,找到
dsql的查询对象,在较新版本的DedeCMS中,通常是这样的结构:
(图片来源网络,侵删)// ... 其他代码 ... $dsql = new DedeSql(false); // ... 其他代码 ... $dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.arcrank > -1 AND arc.ismake=0 $typeidquery $orderquery $keywordquery"); $dsql->Execute('al'); // ... 其他代码 ... -
修改SQL语句: 我们要修改的是
WHERE条件子句,关键在于arc.ismake=0这部分。ismake字段:在DedeCMS数据库中,ismake字段用于控制文章是否置顶。ismake=1表示置顶,ismake=0表示普通文章。- 当前逻辑:
arc.ismake=0的意思是 只调用普通文章(非置顶文章)。 - 我们的需求:首页要显示 所有 文章(包括普通和置顶),要删除这个条件。
修改前 (假设你找到的是类似下面的代码):
$dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.arcrank > -1 AND arc.ismake=0 $typeidquery $orderquery $keywordquery");修改后: 将
AND arc.ismake=0整个删除。$dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.arcrank > -1 $typeidquery $orderquery $keywordquery");注意:如果你的
index.php文件中使用的是GetArtList()这样的函数封装,那么修改会复杂一些,通常需要找到该函数的定义或在调用处传入特定参数来过滤,但最直接有效的方法就是修改底层的dsql查询,如果你的代码结构不同,请仔细查找ismake关键字。 -
保存文件: 保存修改后的
index.php文件并上传回服务器。
完成这一步后,您的首页将不再区分置顶和普通文章,会按默认规则(如发布时间)混合显示所有已审核的文章。
第二步:确认列表页不受影响 (list.php)
默认情况下,列表页是支持置顶文章的,但为了确保万无一失,我们检查一下列表页的调用逻辑。
-
找到文件: 打开
/dede/目录下的list.php文件。 -
定位和检查代码: 同样,找到获取文章列表的SQL查询语句,检查其
WHERE条件。// ... 其他代码 ... $dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.arcrank > -1 $typeidquery $orderquery $keywordquery"); // ... 其他代码 ...你会发现,列表页的SQL查询中根本没有
ismake字段的限制,这意味着它会获取所有符合条件的文章,包括置顶的。 -
置顶排序逻辑: 列表页之所以能把置顶文章排在最前面,是因为
$orderquery这个变量,在list.php的上方,你会找到生成$orderquery的代码,通常是:if($orderby=="hot" || $orderby=="click") { $orderquery = " ORDER BY arc.click $orderWay"; } else if($orderby=="iscommend" || $orderby=="commended") { $orderquery = " ORDER BY arc.ismake $orderWay, arc.id $orderWay"; } else { $orderquery = " ORDER BY arc.sortrank $orderWay"; }当
$orderby为iscommend(或commended) 时,排序条件就变成了ORDER BY arc.ismake $orderWay,因为ismake=1(置顶) 大于ismake=0(普通),所以置顶文章会排在最前面。
列表页的默认逻辑已经完全满足我们的需求,无需修改。
第三步:后台设置与验证
-
发布或编辑文章: 登录DedeCMS后台,发布一篇新文章,或者在编辑已有文章时,勾选“推荐到首页”选项(这个选项对应的数据库字段就是
ismake)。 -
清空缓存: 修改完文件后,为了确保效果生效,请务必清空网站缓存。
- 在后台:
系统->性能选项->更新系统缓存->一键更新。 - 或者,如果安装了“一键更新”插件,直接在首页后台点击“一键更新网站”即可。
- 在后台:
-
验证效果:
- 访问首页:检查首页的文章列表,你会发现刚才置顶的那篇文章,和其他普通文章混在一起,没有特殊的置顶标记或位置。
- 访问任意列表页:在列表页,你会发现这篇文章被成功置顶,显示在列表的最顶端。
至此,整个操作完成,您已经成功实现了“首页不置顶,列表页置顶”的功能。
| 文件 | 修改点 | 修改原因 |
|---|---|---|
/dede/index.php |
删除 SQL 中的 AND arc.ismake=0 |
让首页调用所有文章,忽略置顶状态。 |
/dede/list.php |
无需修改 | 默认逻辑已支持在列表页按 ismake 字段排序,实现置顶效果。 |
这种方法简单直接,且只修改了最底层的查询逻辑,对模板的依赖性最小,兼容性最好。
