最简单的方法(使用flag属性)
这是最直接的方法,通过在列表页的底层模板(list_article.htm)中使用flag属性判断来实现。

适用场景:只想在文章标题前或后简单加上一个“头条”的标识文字。
操作步骤:
-
打开列表页模板文件 找到您当前使用的列表页模板文件,通常是
/templets/您的文件夹名称/list_article.htm。 -
找到文章标题的代码 在模板文件中,找到循环输出文章标题的代码,它通常是这样的:
(图片来源网络,侵删)<a href='[field:arcurl/]'>[field:title/]</a>
-
修改代码,加入头条判断 将上面的代码修改为以下形式,使用
field:flag/来判断文章是否包含“头条”属性。{dede:field name='array' runphp='yes'} if (@me['flag'] == 'c' || @me['flag'] == 'a' || @me['flag'] == 'h') { @me = "<span class='top-tag'>[头条]</span>" . @me['title']; } else { @me = @me['title']; } {/dede:field}或者,更推荐使用
in运算符,代码更简洁:{dede:field name='array' runphp='yes'} if (strpos(@me['flag'], 'c') > 0) { @me = "<span class='top-tag'>[头条]</span>" . @me['title']; } else { @me = @me['title']; } {/dede:field} -
组合成完整的链接 将处理好的标题包裹在链接标签内。
完整示例代码:
<li> <span class="title"> <!-- 这是修改后的头条判断代码 --> <a href="[field:arcurl/]"> {dede:field name='array' runphp='yes'} if (strpos(@me['flag'], 'c') > 0) { @me = "<span class='top-tag'>[头条]</span>" . @me['title']; } else { @me = @me['title']; } {/dede:field} </a> </span> <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> -
添加CSS样式(可选) 为了让“头条”标签更醒目,可以在您的CSS文件中添加如下样式:
.top-tag { color: #ff0000; /* 红色 */ font-weight: bold; margin-right: 5px; }
使用SQL直接查询(最灵活、最强大的方法)
如果您的需求更复杂,比如想在列表页只显示头条文章,或者将头条文章排在最前面,那么直接修改列表页的SQL查询语句是最佳选择。
适用场景:
- 创建一个专门的“头条列表”页面。
- 在普通列表页中,让头条文章排在最前面。
- 统计并显示某个栏目的头条文章数量。
操作步骤:
-
找到列表页的PHP文件 列页的数据由PHP文件生成,而不是直接由模板文件决定,这个文件通常位于
/include/arc.listview.class.php。 -
修改SQL查询语句 用文本编辑器(如VS Code, Sublime Text, Notepad++)打开
arc.listview.class.php文件。-
查找
SelectSql函数:在文件中搜索function SelectSql(),这是用来构建最终SQL查询语句的函数。 -
找到
$this->dsql->SetQuery($this->addSql);:在这行代码之前,你会看到$this->addSql的构建过程,我们需要在这里修改它。
示例1:让头条文章排在列表最前面
在
$this->addSql的赋值语句中,找到order by部分,并修改它,默认可能是order by id desc或order by pubdate desc。修改为:
// 在 $this->addSql 的赋值语句中找到 order by 部分 // 原来是: // $this->addSql .= " arc.id desc "; // 修改为: $this->addSql .= " CASE WHEN arc.flag LIKE '%c%' THEN 0 WHEN arc.flag LIKE '%h%' THEN 1 WHEN arc.flag LIKE '%p%' THEN 2 ELSE 3 END, arc.id desc ";这段SQL的意思是:如果文章的
flag字段包含c(头条),则排序值为0;包含h(推荐)则为1;包含p(图片)则为2;其他则为3,然后按这个自定义的排序值和ID降序排列,这样,所有头条文章就会排在最前面。示例2:只显示头条文章
如果你想创建一个只显示头条文章的列表页(比如栏目ID=5的头条列表),你需要修改获取文章ID列表的SQL。
找到
function GetArcList($typeid=0, $innertext='', $isreclass=0)函数内部,或者在SelectSql函数中修改where条件。// 在构建 $this->addSql 的 where 条件时,增加对 flag 的限制 // 原来的 where 条件可能类似这样: // $this->addSql .= " And arc.arcrank > -1 "; // 修改为: $this->addSql .= " And arc.arcrank > -1 And (arc.flag LIKE '%c%' OR arc.flag LIKE '%h%') ";
这里的
arc.flag LIKE '%c%'表示查询flag字段中包含字符c的记录,也就是头条文章。 -
调用指定栏目的头条(常用)
有时候我们想在列表页调用其他栏目的头条文章,而不是当前栏目的,这需要使用DedeCMS的自定义标记。
适用场景:
- 在新闻列表页,调用产品栏目的头条。
- 在文章页侧边栏,调用推荐栏目的头条。
操作步骤:
在您需要显示的位置(比如列表页模板的侧边栏 list_article.htm 或文章页 article_article.htm),直接使用以下Dede标签:
{dede:arclist flag='c' typeid='目标栏目ID' row='5' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
标签参数说明:
flag='c':这是关键!c代表“头条”,你也可以用h代表“推荐”,p代表“图片”,j代表“跳转”,多个属性可以用flag='ch'这样的形式。typeid='目标栏目ID':指定你要调用哪个栏目的头条。'0'表示调用所有栏目的,'-1'表示调用除了当前栏目外的所有栏目,你需要填写具体的栏目ID。row='5':调用5条头条文章,len='30'`:标题长度,最多显示30个字符。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
flag属性 |
简单、直接、无需修改PHP文件。 | 功能有限,只能在模板内做简单判断。 | 绝大多数情况,只需在标题旁加个“头条”标签。 |
| SQL查询 | 最强大、最灵活,能从根本上改变列表逻辑。 | 需要修改核心PHP文件,升级Dede时可能被覆盖。 | 需要自定义头条排序、创建独立头条列表等复杂需求。 |
arclist |
灵活、可跨栏目调用,符合Dede的设计理念。 | 只能在非列表页(如首页、文章页、其他列表页侧边栏)使用。 | 在一个列表页中调用其他栏目的头条文章。 |
对于大多数用户来说,方法一已经足够满足日常需求,如果需要更复杂的功能,再考虑方法二,而方法三则是实现跨栏目内容调用的标准做法。
