通过调用不同字段(最推荐、最简单)
这是最常用且最简单的方法,它利用了织梦自带的文章推荐/置顶功能,你可以在后台为需要特殊显示的文章打上“推荐”或“置顶”的标签,然后在模板中分别调用。
核心思路:
- 模板文件: 只需要一个列表模板文件(
list_article.htm)。 - 实现方式: 在模板文件内,使用
{dede:arclist}标签分别调用“推荐”文章和“普通”文章,并为它们套用不同的HTML结构。
操作步骤:
第一步:在后台设置栏目模板
- 登录织梦后台。
- 进入【栏目管理】,找到你需要设置的栏目。
- 点击该栏目右侧的【更改】或【管理】。
- 在栏目编辑页面,找到“列表模板”选项。
- 选择一个你准备好的、包含了两种样式的列表模板(我们下面会创建这个模板文件),
list_article.htm。 - 保存设置。
第二步:创建并编辑列表模板文件
在你的模板目录(通常是 /templets/default/ 或你自定义的目录下)创建或编辑 list_article.htm 文件,并写入如下代码:
{dede:include filename="head.htm"/}
<div class="main">
<div class="location"><a href='{dede:global.cfg_cmsurl/}/'>首页</a> > <a href='{dede:type typeid='0'}'[field:typelink /]{/dede:type} ></a></div>
<!-- ==================== 模板一:用于显示推荐文章 ==================== -->
<div class="featured-articles">
<h2>精选推荐</h2>
<ul>
{dede:arclist flag='c' titlelen='40' row='5'}
<li>
<!-- 这里是推荐文章的样式,可以更华丽 -->
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
</div>
<!-- ==================== 模板二:用于显示普通文章 ==================== -->
<div class="normal-articles">
<h2>最新文章</h2>
<ul>
{dede:arclist titlelen='40' row='10'}
<li>
<!-- 这里是普通文章的样式,可以更简洁 -->
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
</div>
<!-- ==================== 分页 ==================== -->
<div class="page_link">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
</div>
{dede:include filename="footer.htm"/}
代码解释:
{dede:arclist flag='c' row='5'}: 这是调用推荐文章的关键。flag='c':c代表“推荐”(commend),你也可以使用flag='h'(头条)、flag='p'(图片)等,或者组合使用如flag='ch'。row='5':表示调用5篇推荐文章。- 这部分被包裹在一个
<div class="featured-articles">中,你可以为这个div在CSS里定义特殊的样式,比如加背景、边框等。
{dede:arclist titlelen='40' row='10'}: 这是调用普通文章。- 没有
flag属性,默认调用所有非推荐的文章。 - 这部分被包裹在
<div class="normal-articles">中,使用默认的列表样式。
- 没有
{dede:pagelist}: 这是织梦的分页标签,它会自动对当前栏目下的所有文章进行分页,无论它们是推荐还是普通。
通过自定义模型字段(最灵活)
如果推荐/置顶无法满足你的需求(比如你想让某个专题下的文章用A模板,另一个专题下的用B模板),那么自定义模型字段是更灵活的选择。
核心思路:
- 创建一个自定义字段,
templet_style,类型为“单选按钮”。 - 在发布文章时,为每篇文章选择它应该使用的样式。
- 在列表模板中,通过判断这个字段的值来加载不同的HTML结构。
操作步骤:
第一步:创建自定义字段
- 进入后台【核心】 -> 【内容模型管理】。
- 选择你当前文章所使用的模型(通常是“文章”),点击【更改】。
- 在字段管理页面,点击【添加新字段】。
- 填写字段信息:
- 字段名称:
templet_style(英文字母,不能有特殊符号) - 字段别名:
模板样式(方便识别) - 字段类型:
radio(单选按钮) - 字段值:
styleA,模板A;styleB,模板B(用英文逗号隔开选项,用英文分号隔开选项和显示名称) - 保存。
- 字段名称:
- 重要! 返回字段列表,找到你刚创建的
templet_style字段,点击后面的【更新系统缓存】。
第二步:在发布文章时选择样式
- 发布或编辑一篇文章时,你会看到多了一个“模板样式”的选项。
- 为你需要特殊显示的文章选择
styleA,其他的保持默认或选择styleB。
第三步:编辑列表模板文件
在 list_article.htm 中,使用 {dede:list} 和 if 判断来实现。
{dede:include filename="head.htm"/}
<div class="main">
<div class="location">...</div> <!-- 同上 -->
<div class="article-list">
{dede:list pagesize='10'}
<!-- ==================== 根据字段值判断使用哪个模板 ==================== -->
[field:array runphp='yes']
if(@me['templet_style'] == 'styleA') {
// 模板A的HTML结构
@me = '<div class="article-item style-a"><h3><a href="'.@me['arcurl'].'">'.@me['title'].'</a></h3><p>'.@me['description'].'</p></div>';
} else {
// 模板B的HTML结构 (默认)
@me = '<div class="article-item style-b"><a href="'.@me['arcurl'].'">'.@me['title'].'</a><span>'.@me['pubdate'].'</span></div>';
}
[/field:array]
{/dede:list}
</div>
<!-- ==================== 分页 ==================== -->
<div class="page_link">...</div> <!-- 同上 -->
</div>
{dede:include filename="footer.htm"/}
代码解释:
[field:array runphp='yes']...[/field:array]:这是一个强大的用法,可以在循环中获取当前文章的所有字段信息,并存入@me数组。if(@me['templet_style'] == 'styleA'):判断自定义字段templet_style的值是否为styleA。@me = '...':如果条件成立,就为@me赋予模板A的HTML字符串;否则,赋予模板B的HTML字符串。- 这种方法极其灵活,可以定义任意多的样式。
通过指定文章模板(最不推荐,仅作了解)
这个方法可以实现,但非常不推荐,因为它会破坏列表页的分页逻辑,导致分页后样式错乱。请尽量避免使用此方法。
核心思路: 为每一篇需要特殊样式的文章,在后台单独指定一个模板文件。
操作步骤:
- 在你的模板目录下创建两个独立的文章模板,
article_style1.htm和article_style2.htm。 - 进入后台【系统】 -> 【系统基本参数】 -> 【核心设置】。
- 找到“文章列表命名规则”和“文章命名规则”,确保它们没有被修改为静态文件名(
{typedir}/{aid}.html),否则此方法无效。 - 发布文章时,在“高级选项” -> “自定义文件名”中,为需要特殊样式的文章手动填写模板文件名,
article_style1.htm。 - 列表模板
{dede:list}会直接调用这个自定义模板,而不是统一的列表样式。
为什么不推荐?
- 破坏分页: 列表页的分页是基于“调用统一模板”的实现的,一旦某篇文章指向了不同的模板,分页逻辑就会失效,下一页可能就找不到这篇文章了,或者样式完全混乱。
- 维护困难: 每篇文章都要手动设置,文章一多,管理起来就是一场灾难。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 调用不同字段 | 简单、高效、原生支持、不破坏分页 | 灵活性相对较低,依赖文章的推荐/置顶状态 | 绝大多数场景,如“推荐文章”和“普通文章”分开展示。 |
| 自定义模型字段 | 极其灵活、可扩展性强 | 需要修改模型和数据库,对新手稍复杂 | 需要根据文章内容、分类等复杂条件来指定不同样式的场景。 |
| 指定文章模板 | 实现简单(概念上) | 严重破坏分页、维护性极差 | 极其不推荐,仅在极少数、不依赖分页的单页展示场景下考虑。 |
给你的建议:
- 如果你只是想把推荐/置顶文章和普通文章分开显示,请毫不犹豫地选择【方法一】。 这是最正确、最织梦的做法。
- 如果你有更复杂的分类需求,教程”类文章用一种样式,“新闻”类用另一种,方法二】是你的最佳选择。
