下面我将分步详细讲解如何实现,并提供两种主流的实现方法:

(图片来源网络,侵删)
核心思路
- 利用现有字段:织梦的文章表
dede_archives中已经内置了iscommend(推荐)和flag(标志位,包含 'h' 置顶)字段,我们不需要修改数据库结构。 - 修改列表页模板:在
list_article.htm模板文件中,使用自定义的SQL查询来获取带有推荐或置顶标志的文章。 - 自定义调用标签:织梦的
{dede:list}标签功能有限,我们需要使用更强大的{dede:sql}或{dede:arclist}标签来精确控制查询条件。 - CSS样式美化:通过CSS为推荐和置顶的文章添加特殊的样式,如不同的背景色、边框或图标,以便用户一眼就能识别。
使用 {dede:sql} 标签(最灵活、推荐)
这种方法可以直接在模板中编写SQL语句,自由度最高,可以完全控制查询逻辑。
步骤 1:修改列表页模板 list_article.htm
- 打开你的模板文件夹,找到
list_article.htm文件。 - 找到默认的列表循环标签,通常是
{dede:list}。注意:{dede:list}是一个分页标签,它内部循环一次只输出一篇文章,并且它不支持复杂的SQL条件,我们需要替换掉它,或者在其外部用{dede:sql}来获取特殊文章。
步骤 2:编写SQL查询并调用
下面我将给出一个完整的示例,展示如何在列表页上方分别输出“置顶文章”和“推荐文章”,然后下面再输出普通文章。
在 list_article.htm 中,你可以这样组织代码:
{dede:include filename="head.htm"/}
<!-- 置顶文章列表 -->
<h2 class="top-title">置顶文章</h2>
<ul class="list top-list">
{dede:sql sql='SELECT * FROM dede_archives WHERE typeid = [field:id/] AND flag LIKE "%h%" ORDER BY sortrank DESC, id DESC'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:sql}
</ul>
<!-- 推荐文章列表 -->
<h2 class="commend-title">推荐文章</h2>
<ul class="list commend-list">
{dede:sql sql='SELECT * FROM dede_archives WHERE typeid = [field:id/] AND iscommend = 1 ORDER BY sortrank DESC, id DESC'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:sql}
</ul>
<!-- 普通文章列表 -->
<h2 class="normal-title">最新文章</h2>
<ul class="list normal-list">
{dede:list pagesize='10'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
{dede:include filename="footer.htm"/}
代码解析:

(图片来源网络,侵删)
[field:id/]:这是当前栏目的ID,{dede:sql}标签外层需要这个变量来限定文章属于当前栏目。flag LIKE "%h%":这是查询置顶文章的关键。flag字段是一个字符串,'h' 代表置顶,使用LIKE "%h%"可以确保即使文章同时有其他标志(如 'c' 移动端),只要包含 'h' 就能被筛选出来。iscommend = 1:这是查询推荐文章的关键。iscommend字段为1时表示推荐。ORDER BY sortrank DESC, id DESC:sortrank是文章的排序权重,id是文章ID,这样可以让置顶/推荐的文章按权重排序,权重相同则按发布时间倒序。{dede:list}:保留它来显示普通文章,这样分页功能依然有效。
步骤 3:添加CSS样式
在模板的CSS文件或 <style> 标签中,为不同列表添加样式,让它们看起来有区别。
/* 基础列表样式 */
.list li {
list-style: none;
padding: 10px;
border-bottom: 1px solid #eee;
}
.list .title {
font-weight: bold;
margin-right: 20px;
}
.list .date {
color: #999;
font-size: 12px;
}
/* 置顶文章样式 */
.top-list li {
background-color: #fffbea;
border-left: 4px solid #ffc107;
font-weight: bold;
}
/* 推荐文章样式 */
.commend-list li {
background-color: #f0f9ff;
border-left: 4px solid #40a9ff;
}
/* 普通文章样式 */
.normal-list li {
/* 默认样式即可 */
}
使用 {dede:arclist} 标签(织梦官方推荐)
{dede:arclist} 是一个功能非常强大的列表标签,支持丰富的参数,是实现这个需求的另一种优雅方式。
步骤 1:修改列表页模板 list_article.htm
同样,打开 list_article.htm,用 {dede:arclist} 来替换或补充 {dede:list}。
{dede:include filename="head.htm"/}
<!-- 置顶文章列表 -->
<h2 class="top-title">置顶文章</h2>
<ul class="list top-list">
{dede:arclist typeid='[field:id/]' flag='h' orderby='sortrank' pagesize='5'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
<!-- 推荐文章列表 -->
<h2 class="commend-title">推荐文章</h2>
<ul class="list commend-list">
{dede:arclist typeid='[field:id/]' iscommend='1' orderby='sortrank' pagesize='10'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
<!-- 普通文章列表 -->
<h2 class="normal-title">最新文章</h2>
<ul class="list normal-list">
{dede:list pagesize='10'}
<li>
<span class="title"><a href='[field:arcurl/]'>[field:title/]</a></span>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
{dede:include filename="footer.htm"/}
代码解析:

(图片来源网络,侵删)
typeid='[field:id/]':限定栏目。flag='h':{dede:arclist}的flag参数可以直接指定标志,'h' 就是置顶。iscommend='1':{dede:arclist}的iscommend参数可以直接指定推荐。orderby='sortrank':按权重排序。pagesize='5':控制每个列表显示的文章数量。
步骤 2:添加CSS样式
CSS样式部分与方法一完全相同,这里不再赘述。
如何给文章设置“推荐”和“置顶”?
无论你选择哪种方法,最终都需要在后台发布文章时设置这些属性。
- 登录织梦后台。
- 进入“[核心] -> [内容发布] -> [添加文档]”。
- 在发布文章的表单中,找到 “自定义属性” 这个字段。
- 设置推荐:勾选 “推荐”。
- 设置置顶:勾选 “置顶”。
- 发布文章后,这些属性就会写入到
dede_archives表的iscommend和flag字段中。
总结与对比
| 特性 | 方法一 ({dede:sql}) |
方法二 ({dede:arclist}) |
|---|---|---|
| 灵活性 | 极高,可以写任意复杂的SQL。 | 高,参数丰富,但不如SQL灵活。 |
| 易用性 | 需要懂SQL语法。 | 非常简单,标签化参数,易于理解。 |
| 性能 | 直接查询数据库,效率高。 | 织梦对 {dede:arclist} 有缓存机制,效率也高。 |
| 适用场景 | 需要非常复杂的查询逻辑,或 {dede:arclist} 无法满足需求时。 |
绝大多数情况,是官方推荐且最方便的做法。 |
推荐建议:
对于大多数用户,强烈推荐使用方法二 ({dede:arclist}),它更符合织梦的设计理念,代码更简洁,也更容易维护,只有在遇到 {dede:arclist 无法解决的复杂查询时,才考虑使用方法一 ({dede:sql})。
