在DedeCMS中,文章置顶功能是通过一个名为 ismake 的字段来控制的,这个字段是一个布尔值(0或1):

ismake = 1: 表示该文章被置顶。ismake = 0: 表示该文章为普通文章,未置顶。
所有与置顶相关的标签和SQL查询,核心都是围绕这个 ismake 字段展开的。
后台操作:如何置顶文章?
在理解标签之前,首先要知道如何让一篇文章进入置顶状态。
- 登录DedeCMS后台。
- 进入 “核心” -> “内容发布” -> “新增文档” 或编辑现有文档。
- 在文章编辑页面,找到 “置顶” 选项(通常是一个复选框)。
- 勾选“置顶”,然后发布或更新文档。
- 发布后,这篇文章的
ismake值就会在数据库中被设置为1。
重要提示: 仅仅勾选“置顶”并发布,文章可能并不会立刻显示在列表的最顶端,你还需要在后台的 “首页” -> “首页管理” -> “首页默认文档” 中,将置顶文章手动设置为“首页头条”或进行其他排序操作,或者通过调用特定标签来专门获取置顶文章。
前台调用:常用置顶标签
DedeCMS提供了多种标签来调用置顶文章,以满足不同的场景需求。

调用所有置顶文章(最常用)
这个标签会忽略所有栏目限制,直接从全站的文档中调用 ismake=1 的文章。
{dede:arclist flag='h' titlelen='50' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
标签解析:
flag='h': 这是最关键的参数。h代表“头条”或“特荐”,它等同于ismake=1的条件,使用这个参数,系统就会只查询置顶的文章,len='50'`: 标题长度,最多显示50个字符。row='10': 调用文章的数量,这里调用10篇。[field:arcurl/]: 文章链接。[field:title/]: 文章标题。[field:pubdate ...]: 发布日期,并使用函数MyDate格式化。
调用指定栏目下的置顶文章
如果你只想在某个特定栏目(网站公告”)的列表页显示该栏目的置顶文章,可以使用 typeid 参数。
{dede:arclist typeid='5' flag='h' titlelen='50' row='5'}
<li>
<strong>[field:title/]</strong>
<small>[field:pubdate function="MyDate('Y-m-d', @me)"/]</small>
</li>
{/dede:arclist}
标签解析:
typeid='5': 指定栏目ID为5的栏目,请将5替换为你自己的栏目ID。flag='h': 仍然保留,表示只调用该栏目下的置顶文章。
调用带图标的置顶文章
为了更直观地展示置顶文章,我们可以在标题前加上一个小图标(如“置顶”或“📌”)。
{dede:arclist flag='h' titlelen='50' row='10'}
<li>
<span style="color:red;">【置顶】</span>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
这里我们直接在模板中写入了 【置顶】 文字,你也可以使用 <img> 标签来引入一个图标文件。
调用全站置顶文章(使用SQL标签)
当 arclist 标签无法满足复杂需求时,可以使用更灵活的 sql 标签。sql 标签允许你直接书写SQL语句。
{dede:sql sql='Select arc.id, arc.title, arc.pubdate, arc.typeid, tp.typedir
From dede_archives arc
left join dede_arctype tp on arc.typeid = tp.id
where arc.ismake = 1
order by arc.pubdate desc
limit 0, 10'}
<li>
<a href="[field:typedir function='str_replace("{cmspath}", "", @me)']/[field:id].html">[field:title/]</a>
</li>
{/dede:sql}
标签解析:
sql='...': 书写完整的SQL查询语句。From dede_archives arc:dede_archives是存储文章主表的表名(dede_是你的表前缀,可能不同)。left join dede_arctype tp ...: 为了获取栏目路径,需要关联dede_arctype表。where arc.ismake = 1: 这是核心条件,明确指定查询置顶文章。order by arc.pubdate desc: 按发布日期倒序排列,最新的在最前面。limit 0, 10: 限制查询结果,从第0条开始,共10条。[field:typedir ...]: 在SQL标签中,获取文章链接的方式与arclist不同,需要手动拼接。
常见问题与解决方案
问题1:为什么我勾选了置顶,文章没有置顶效果?
原因分析: 最常见的原因是 没有调用正确的置顶标签,你可能正在使用一个普通的列表标签,它默认不会过滤出置顶文章。
解决方案:
- 检查模板文件:找到你首页或列表页的模板文件(通常是
index.htm或list_article.htm)。 - 找到调用文章的标签:定位到类似
{dede:arclist ...}的部分。 - 添加
flag='h'参数:确保调用的标签中包含了flag='h',从:{dede:arclist row='10'...}修改为:
{dede:arclist flag='h' row='10'...}
问题2:我想把置顶文章放在最上面,普通文章在下面,怎么实现?
这需要分两步调用:先调用置顶文章,再调用普通文章。
<!-- 第一部分:调用置顶文章 -->
<h3>网站公告</h3>
<ul class="top-news">
{dede:arclist flag='h' row='5' titlelen='40'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
<!-- 第二部分:调用普通文章(排除置顶) -->
<h3>最新文章</h3>
<ul class="latest-news">
{dede:arclist flag='' row='10' titlelen='40'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
注意,普通文章标签里 flag 参数为空 或直接不写 flag 属性。
问题3:ismake 字段是什么时候添加的?
ismake 字段是DedeCMS一个非常基础和核心的字段,自早期版本就一直存在,上述所有方法在绝大多数DedeCMS版本(如5.7、5.8等)中都是通用的。
| 功能需求 | 推荐标签 | 关键参数/条件 |
|---|---|---|
| 调用全站置顶文章 | {dede:arclist} |
flag='h' |
| 调用指定栏目置顶文章 | {dede:arclist} |
typeid='栏目ID' 和 flag='h' |
| 自定义复杂置顶查询 | {dede:sql} |
where arc.ismake = 1 |
| 实现置顶+普通混合列表 | 两个 {dede:arclist} |
一个用 flag='h',一个不用 |
希望这份详细的指南能帮助你完全掌握DedeCMS的文章置顶功能!
