dede如何生成排序栏目?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文
  1. 后台管理排序:指在后台栏目列表中,手动拖动或设置一个数字来调整栏目的显示顺序,这个顺序主要用于后台管理,不会直接影响前台网站栏目的显示顺序。
  2. 前台显示排序:指在前台网站(如导航栏、侧边栏)中,栏目按照指定的规则(如后台排序、文章数量、发布时间等)进行排列,这才是我们通常所说的“生成排序栏目”。

下面我将分别对这两种情况进行详细说明。

dede生成排序栏目
(图片来源网络,侵删)

后台管理排序(不影响前台)

这是最基础、最简单的排序方式,用于管理员在后台更好地组织栏目。

操作步骤:

  1. 登录后台:使用管理员账号登录您的 DedeCMS 后台。
  2. 进入栏目管理:在左侧菜单中,找到 栏目 -> 栏目管理
  3. 进行排序
    • 方法A(推荐):直接拖动,在栏目列表页面,将鼠标悬停在您想移动的栏目行上,会出现一个“四向箭头”图标,按住鼠标左键,上下拖动到您想要的位置,松开即可。
    • 方法B:使用排序数字,在栏目列表的“排序”一列,每个栏目都有一个数字,直接修改这个数字,然后点击底部的“保存排序”按钮,DedeCMS 会按照数字从小到大的顺序排列栏目(数字越小,排序越靠前)。

重要提示:这个排序仅用于后台列表的显示顺序,默认情况下,不会改变前台网站栏目(如导航栏)的显示顺序,前台栏目的顺序通常由栏目的“类型”和“上级栏目”决定。


前台显示排序(影响网站用户看到的顺序)

这才是我们通常需要的功能,即让网站上的栏目(如主导航、文章列表等)按照我们设定的规则来排序,实现这个功能的关键在于 SQL 查询

dede生成排序栏目
(图片来源网络,侵删)

我们将通过修改模板文件,使用自定义的 SQL 语句来获取排序后的栏目列表。

场景1:按照后台“排序”数字进行排序

这是最常见的需求,让前台栏目也遵循后台的“排序”值。

操作步骤:

  1. 后台设置排序:首先按照“方法一”的步骤,在后台将您想要的栏目顺序设置好。

    dede生成排序栏目
    (图片来源网络,侵删)
  2. 找到前台模板文件

    • 主导航栏:通常位于 /templets/default/ 目录下,文件名为 head.htm
    • 侧边栏栏目列表:这取决于您的具体页面和调用方式,可能需要根据您的网站结构来查找,在文章列表页 list_article.htm 或首页 index.htm 中查找调用栏目的代码。
  3. 修改模板文件

    • 用文本编辑器(如 Notepad++、VS Code)打开您需要修改的模板文件。
    • 找到调用顶级栏目的代码,它通常是这样的:
      {dede:channel type='top' row='8'}
      <li><a href="[field:typeurl/]">[field:typename/]</a></li>
      {/dede:channel}
    • 关键修改:我们需要为这个标签添加一个 sql 属性,并编写自定义的 SQL 查询,DedeCMS 的标签支持在 sql 属性中直接执行 SQL。

    修改后的代码如下

    {dede:sql sql='SELECT id,typename,typedir,isdefault,defaultname,issystem,ishome,channeltype,corank,description,keywords,seotitle,moresite,siteurl,sitepath 
                 FROM dede_arctype 
                 WHERE reid = 0 
                 ORDER BY sortrank ASC'}
      <li><a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/]</a></li>
    {/dede:sql}

    代码解释

    • dede:sql:自定义 SQL 查询标签。
    • sql='...':SQL 语句。
    • SELECT id,typename,typedir...:从 dede_arctype 表中(这是 DedeCMS 存储栏目的表)我们需要的字段。
    • WHERE reid = 0reid 是上级栏目的 ID。reid = 0 表示只查询顶级栏目。
    • ORDER BY sortrank ASC这是核心! 它指定查询结果按照 sortrank 字段(即后台的“排序”字段)进行升序排列(ASC 是从小到大,DESC 是从大到小)。
    • [field:typedir function='str_replace("{cmspath}", "", "@me")'/]:由于 typedir 字段中包含了 {cmspath} 这样的变量,我们需要用 function 进行处理,替换掉它,得到正确的栏目链接地址。
  4. 保存并更新:保存修改后的模板文件,然后到后台“生成” -> “更新主页”或“更新HTML”,让修改生效。

场景2:按照文章数量进行排序

有时候我们希望栏目按照其包含的文章数量来排序,热门栏目排在前面。

操作步骤:

  1. 找到模板文件:同上,找到需要修改的模板文件。

  2. 修改模板文件:使用 SQL 联表查询,结合 dede_arctypedede_archives(文章表)。

    修改后的代码如下

    {dede:sql sql='SELECT a.id, a.typename, a.typedir, count(b.id) as article_count 
                 FROM dede_arctype as a 
                 LEFT JOIN dede_archives as b ON a.id = b.typeid 
                 WHERE a.reid = 0 
                 GROUP BY a.id 
                 ORDER BY article_count DESC'}
      <li><a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/] ([field:article_count/])</a></li>
    {/dede:sql}

    代码解释

    • FROM dede_arctype as a LEFT JOIN dede_archives as b ON a.id = b.typeid:将栏目表(a)和文章表(b)通过 typeid 字段关联起来。
    • count(b.id) as article_count:统计每个栏目下文章的数量,并命名为 article_count
    • GROUP BY a.id:按栏目 ID 分组,这样才能正确统计每个栏目的文章数。
    • ORDER BY article_count DESC:按照我们刚刚统计出的 article_count 进行降序排列,这样文章数量多的栏目就会排在前面。
    • [field:article_count/]:在模板中调用文章数量。

总结与建议

排序方式 适用场景 优点 缺点
后台拖动/排序 仅需在后台整理栏目,不改变前台显示。 简单直观,无需修改代码。 不影响前台用户体验。
前台按 sortrank 排序 希望前台栏目(如导航)和后台顺序一致。 实现简单,符合常规管理习惯。 需要修改模板文件。
前台按文章数排序 制作热门栏目推荐、按热度排序的导航。 动态展示,内容更吸引人。 SQL 查询稍复杂,对数据库性能有轻微影响。

最佳实践建议:

  • 导航栏:通常建议使用后台排序sortrank)来控制,这样网站结构清晰,管理员也容易维护。
  • 侧边栏推荐:可以在侧边栏使用按文章数排序的 SQL,展示热门栏目,增加用户互动。

重要提醒:在修改模板文件和编写 SQL 时,请务必:

  1. 备份原文件:修改前务必备份原始模板文件,以防出错。
  2. 检查表前缀:如果你的 dede_arctype 表前缀不是 dede_(例如修改过),请将 SQL 中的表名相应修改。
  3. 谨慎操作:错误的 SQL 可能导致网站无法正常显示,如果不确定,可以先在本地测试环境进行操作。
-- 展开阅读全文 --
头像
C语言如何开发CAD工具?
« 上一篇 04-19
织梦验证码如何彻底关闭?
下一篇 » 04-19
取消
微信二维码
支付宝二维码

目录[+]