dede首页不置顶、列表页置顶,如何实现?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文
  1. 修改首页的调用逻辑:让首页在调用文章时,忽略 ismake (即 iscommend) 这个置顶字段。
  2. 确保列表页不受影响:列表页的调用逻辑保持不变,依然可以正常显示置顶文章。

操作步骤

请务必在修改前 备份相关文件,以防出错。

dede 文章首页不置顶 列表页置顶
(图片来源网络,侵删)

第一步:修改首页文章列表调用文件 (index.php)

这个文件是网站首页的核心PHP文件,我们在这里修改它的数据库查询语句,过滤掉置顶文章。

  1. 找到文件: 使用FTP或文件管理器,登录您的网站服务器,找到并打开 /dede/ 目录下的 index.php 文件。

  2. 定位代码: 在 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中,通常是这样的结构:

    dede 文章首页不置顶 列表页置顶
    (图片来源网络,侵删)
    // ... 其他代码 ...
    $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');
    // ... 其他代码 ...
  3. 修改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 关键字。

  4. 保存文件: 保存修改后的 index.php 文件并上传回服务器。

完成这一步后,您的首页将不再区分置顶和普通文章,会按默认规则(如发布时间)混合显示所有已审核的文章。


第二步:确认列表页不受影响 (list.php)

默认情况下,列表页是支持置顶文章的,但为了确保万无一失,我们检查一下列表页的调用逻辑。

  1. 找到文件: 打开 /dede/ 目录下的 list.php 文件。

  2. 定位和检查代码: 同样,找到获取文章列表的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 字段的限制,这意味着它会获取所有符合条件的文章,包括置顶的。

  3. 置顶排序逻辑: 列表页之所以能把置顶文章排在最前面,是因为 $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";
    }

    $orderbyiscommend (或 commended) 时,排序条件就变成了 ORDER BY arc.ismake $orderWay,因为 ismake=1 (置顶) 大于 ismake=0 (普通),所以置顶文章会排在最前面。

列表页的默认逻辑已经完全满足我们的需求,无需修改


第三步:后台设置与验证

  1. 发布或编辑文章: 登录DedeCMS后台,发布一篇新文章,或者在编辑已有文章时,勾选“推荐到首页”选项(这个选项对应的数据库字段就是 ismake)。

  2. 清空缓存: 修改完文件后,为了确保效果生效,请务必清空网站缓存。

    • 在后台:系统 -> 性能选项 -> 更新系统缓存 -> 一键更新
    • 或者,如果安装了“一键更新”插件,直接在首页后台点击“一键更新网站”即可。
  3. 验证效果

    • 访问首页:检查首页的文章列表,你会发现刚才置顶的那篇文章,和其他普通文章混在一起,没有特殊的置顶标记或位置。
    • 访问任意列表页:在列表页,你会发现这篇文章被成功置顶,显示在列表的最顶端。

至此,整个操作完成,您已经成功实现了“首页不置顶,列表页置顶”的功能。

文件 修改点 修改原因
/dede/index.php 删除 SQL 中的 AND arc.ismake=0 让首页调用所有文章,忽略置顶状态。
/dede/list.php 无需修改 默认逻辑已支持在列表页按 ismake 字段排序,实现置顶效果。

这种方法简单直接,且只修改了最底层的查询逻辑,对模板的依赖性最小,兼容性最好。

-- 展开阅读全文 --
头像
织梦CMS如何正确删除JS引用?
« 上一篇 昨天
C语言WebSocket API实例如何实现?
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码

目录[+]