在DedeCMS系统中,为文章添加“new”标识是提升网站活跃度和用户体验的常见需求,通常用于标记最新发布的文章,引导用户关注最新内容,实现这一功能需要结合模板修改、CSS样式调整及数据库操作,以下是详细的操作步骤和注意事项:

实现“new”标识的原理
“new”标识的核心逻辑是通过判断文章发布时间与当前时间的差值,若在设定的时间范围内(如24小时内),则显示“new”标记,这需要修改文章列表模板(如list_article.htm
页模板(如article_article.htm
),并配合CSS样式实现视觉效果。
修改文章列表模板(实现列表页“new”标识)
-
找到并打开列表模板文件
登录DedeCMS后台,进入“模板”-“默认模板管理”,找到当前使用的文章列表模板(如list_article.htm
),用编辑器打开。 -
添加时间判断逻辑
在文章循环标签{dede:arclist}
内,通过[field:pubdate function="strftime('%Y-%m-%d %H:%M:%S',@me)"/]
获取文章发布时间,并使用PHP代码判断是否在设定时间内,在标题[field:title/]
后添加以下代码:{dede:arclist titlelen='50' row='10'} <li> <span class="title"> [field:title/] <!-- 判断发布时间是否在24小时内 --> [field:pubdate runphp='yes'] $ntime = time(); $day3 = 3600 * 24; // 24小时 if(($ntime - @me) < $day3) @me = "<span class='new'>new</span>"; else @me = ""; [/field:pubdate] </span> <span class="date">[field:pubdate function="MyDate('m-d',@me)"/]</span> </li> {/dede:arclist}
-
添加CSS样式
在模板的<head>
部分或外部CSS文件中添加样式,定义“new”标识的显示效果:(图片来源网络,侵删).new { color: #ff0000; font-size: 12px; margin-left: 5px; font-weight: bold; }
修改文章内容页模板(实现内容页“new”标识)
-
页模板
在“默认模板管理”中找到article_article.htm
文件,打开编辑。 -
下方添加时间判断
在文章标题<h1>{dede:field.title/}</h1>
下方插入以下代码:{dede:field.pubdate runphp='yes'} $ntime = time(); $day3 = 3600 * 24; if(($ntime - @me) < $day3) @me = "<span class='new'>new</span>"; else @me = ""; [/dede:field.pubdate]
样式可复用列表页的CSS定义,或单独调整。
通过自定义函数优化(可选)
若希望更灵活地控制“new”显示时间(如自定义小时数),可通过DedeCMS的自定义函数实现:

- 进入“系统”-“系统基本参数”-“添加新变量”,创建变量如
new_hour
(值为24)。 - 在模板中调用变量:
{dede:field.pubdate runphp='yes'} $ntime = time(); $new_hour = intval(@me); // 获取系统变量值 $day3 = 3600 * $new_hour; if(($ntime - @me) < $day3) @me = "<span class='new'>new</span>"; else @me = ""; [/dede:field.pubdate]
注意事项
- 时间计算准确性:确保服务器时间与本地时间一致,避免因时差导致判断错误。
- 模板缓存:修改模板后需在后台“更新缓存”或“生成HTML”才能生效。
- 性能影响:大量文章时,PHP时间判断可能增加服务器负担,建议合理设置“new”显示时长(如48小时内)。
- 移动端适配:若网站包含移动端,需额外添加响应式CSS,如
.new{font-size: 10px;}
。
常见问题与解决方案
以下是操作过程中可能遇到的问题及解答:
Q1:修改模板后“new”标识不显示,如何排查?
解答:
首先检查模板代码中的PHP语法是否正确(如runphp='yes'
是否拼写错误);其次确认时间计算逻辑,例如$day3
的值是否与预期一致(如24小时应为3600*24
);最后检查CSS样式是否被其他样式覆盖,可通过浏览器开发者工具查看元素样式,若仍不生效,尝试清除模板缓存并重新生成页面。
Q2:如何为不同栏目设置不同的“new”显示时长?
解答:
可通过修改数据库实现,在dede_arctype
表(栏目表)中添加新字段newhours
(类型为INT,默认值24),然后在模板中调用当前栏目的newhours
值:
{dede:field.typeid runphp='yes'} $id = @me; $row = $GLOBALS['dsql']->GetOne("SELECT newhours FROM dede_arctype WHERE id=$id"); $newhours = $row['newhours']; $ntime = time(); $day3 = 3600 * $newhours; if(($ntime - @me) < $day3) @me = "<span class='new'>new</span>"; else @me = ""; [/dede:field.typeid]
后台需为各栏目单独设置newhours
值,实现差异化显示。
通过以上步骤,即可在DedeCMS中灵活实现文章“new”标识功能,有效提升网站内容的时效性展示。