DedeCMS实用教程:一文详解如何制作并调用两个不同模板(附代码示例)
** 在使用DedeCMS建站过程中,常常会遇到需要为不同栏目、内容或场景展示不同风格模板的需求,本文将以“dede如何做两个模板”为核心,从基础原理到实际操作,详细讲解DedeCMS多模板制作的多种方法,包括栏目单独模板、文章内容页模板以及自定义调用方法,助你轻松实现网站多样化布局,提升用户体验。

引言:为什么你的DedeCMS网站需要两个不同的模板?
作为一名DedeCMS用户,你是否曾遇到过这样的困惑:
- 首页和栏目页风格迥异: 首页设计得精美大气,但进入栏目后却发现样式单调,缺乏吸引力。
- 不同栏目需要不同布局: 公司新闻列表可能只需要标题和日期,而产品展示列表则需要图片、简介和价格。
- 需要特殊展示: 活动专题”页面,你希望它拥有完全不同于常规页面的布局和样式。
这些问题的核心,都指向了同一个解决方案:为网站的不同部分制作和使用不同的模板,掌握“dede如何做两个模板”的技能,是每一位进阶DedeCMS开发者的必备能力,本文将为你彻底揭开多模板配置的神秘面纱。
核心概念:DedeCMS模板是如何工作的?
在动手之前,我们先花一分钟理解DedeCMS的模板机制,这有助于你从根本上解决问题,而不是死记硬背操作步骤。
DedeCMS的模板引擎(dede/template.class.php)在渲染页面时,会遵循一套优先级规则来寻找并加载对应的模板文件,这个规则可以简化为:
优先级从高到低:
- 硬编码指定: 在PHP程序文件中,通过
GetTemplets()或include函数明确指定模板路径。 - 自定义字段/参数指定: 通过文章的自定义字段、栏目参数等,关联到特定的模板。
- 默认规则查找: 根据当前页面的类型(首页、列表页、文章页等),按照默认的文件名规则去
/templets/目录下查找。
默认模板文件名规则:
- 首页:
index.htm - 列表页:
list_栏目ID.htm或list_栏目目录.htm - 文章页:
article_栏目ID.htm或article_栏目目录.htm
理解了这一点,我们就可以通过“指定规则”或“打破规则”来实现两个模板的应用。
实战场景一:为指定栏目使用独立模板
这是最常见的需求,比如你的“产品中心”栏目需要一套专属的列表页和内容页模板。
步骤1:创建新的模板文件
假设你的默认列表页模板是 /templets/default/list.htm,你为“产品中心”栏目创建一个新的模板文件,/templets/default/list_products.htm。
list_products.htm 示例代码 (与 list.htm 布局不同):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
<link rel="stylesheet" href="/templets/default/style.css">
</head>
<body>
<div class="products-header">
<h1>{dede:field.name/}</h1>
<p>这里是产品中心的专属头部,可能包含轮播图或特定Banner</p>
</div>
<div class="products-list">
{dede:list pagesize='12'}
<div class="product-item">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
<p class="price">¥[field:price function='number_format(@me, 2)'/]</p>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
</a>
</div>
{/dede:list}
</div>
<div class="page-nav">
{dede:pagelist listsize='4' listitem='info,index,pre,next,end'}
</div>
</body>
</html>
关键点:
- 文件名
list_products.htm中的products是我们自定义的标识。 - 模板内部使用了
{dede:list}等标签,但HTML结构和CSS类名(如.products-item)与默认模板完全不同。
步骤2:在后台指定栏目模板
- 登录你的DedeCMS后台。
- 进入【核心】 -> 【栏目管理】。
- 找到并点击你想要应用新模板的栏目,产品中心”。
- 在栏目编辑页面,找到 “列表选项” 或 “高级选项” 标签页。
- 找到 “列表模板(list)” 这一栏,默认值可能是
list_default.htm或空。 - 你直接输入你新创建的模板文件名,不带路径,即:
list_products.htm。 - 保存更改。
效果:
当你访问“产品中心”栏目的列表页时,DedeCMS就会自动加载 /templets/default/list_products.htm 而不是默认的 list.htm页模板的设置方法完全相同,只需在“文章选项”中设置“文章模板(article)”即可。
实战场景二:为指定文章或文章类型使用独立模板
我们不需要整个栏目换模板,而是某几篇文章或者某一类文章需要特殊展示。
方法A:通过文章自定义字段实现(推荐)
这种方法非常灵活,可以自由指定任意文章使用哪个模板。
步骤1:创建新的内容页模板
创建一个新的内容页模板,/templets/default/article_special.htm,这个模板可以包含特殊的布局,比如侧边栏、下载链接、视频播放器等。
步骤2:在后台添加自定义字段
- 进入【核心】 -> 【内容模型管理】 -> 选择你的内容模型(如“文章”)-> 【管理字段】。
- 点击 “添加新字段”。
- 字段名称: 填写
templet(字段名只能用英文、数字和下划线)。- 填写
指定模板(这个会在后台文章编辑时显示)。 - 字段类型: 选择 “文本框”。
- 字段参数: 可以填写一些提示文字,如
请输入模板文件名,如 article_special.htm。 - 保存。
- 填写
步骤3:发布文章时指定模板
- 当你发布或编辑一篇文章时,在文章编辑页面的下方,会多出一个你刚刚创建的 “指定模板” 文本框。
- 在这个框中,输入你想要使用的模板文件名,
article_special.htm。 - 生成或更新文章。
原理:
当DedeCMS准备渲染文章页时,它会先检查文章的自定义字段中是否有名为 templet 的字段,如果有,并且值不为空,系统就会优先加载这个字段指定的模板文件。
方法B:通过修改PHP文件实现(进阶)
如果你希望根据文章的某个属性(比如一个自定义的分类)来动态切换模板,可以修改文章内容页的PHP文件。
- 找到并打开文章内容页的PHP文件,通常位于
/plus/目录下,文件名为view.php。 - 在文件中找到处理文章数据的核心逻辑部分,一般在
require_once(DEDEINC.'/view.class.php');和$arc->Display()之间。 - 添加你的判断逻辑。
示例代码:
假设你有一个自定义字段 flag,值为 special 的文章需要使用特殊模板。
// 在 include/arc.archives.class.php 中修改 Display() 方法会更优雅,但直接修改 view.py 更简单
// 打开 /plus/view.php
// ... 前面的代码 ...
require_once(DEDEINC.'/view.class.php');
$arc = new Archivess($aid);
// ===== 在这里添加你的判断逻辑 =====
// 获取文章的自定义字段 flag
$flag = $arc->Fields['flag'];
// flag 字段的值包含 'special',则使用特殊模板
if (strpos($flag, 'special') !== false) {
// 指定特殊模板路径
$arc->SetTemplet($cfg_templets_dir.'/'.$cfg_df_style.'/article_special.htm');
}
// =================================
$arc->Display();
注意: 直接修改核心文件(如 view.php)在升级DedeCMS时可能会被覆盖,建议做好备份或考虑通过二次开发接口实现。
高级技巧:在首页或列表页中调用不同模板的内容
我们甚至想在同一个页面(如首页)的不同位置,调用不同模板风格的区块,这可以通过自由列表或自定义SQL配合底层模板来实现。
示例:在首页调用一个“活动预告”模块,使用特殊样式。
-
创建底层模板: 在
/templets/default/下创建一个名为activity_item.htm的文件,它只包含单个活动项的HTML结构。activity_item.htm:<div class="activity-box"> <h3>[field:title/]</h3> <p class="time">[field:pubdate function="MyDate('Y-m-d', @me)"/]</p> <a href="[field:arcurl/]" class="more">查看详情</a> </div> -
在首页调用: 在你的首页模板
index.htm中,使用{dede:arclist}标签并指定templet属性。index.htm中的调用代码:<section class="activity-preview"> <h2>近期活动</h2> {dede:arclist typeid='10' row='3' titlelen='30' orderby='pubdate' templet='activity_item.htm'} {/dede:arclist} </section>typeid='10': 指定调用哪个栏目下的文章。templet='activity_item.htm': 这是关键! 它告诉arclist标签,每个循环项都去activity_item.htm这个底层模板中渲染,而不是使用默认的样式。
总结与最佳实践
通过以上四种方法,你已经掌握了“dede如何做两个模板”的核心技能,让我们来总结一下:
| 需求场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 整个栏目换模板 | 后台栏目设置 | 简单、官方支持、无需代码 | 只能按栏目划分,不够灵活 |
| 单篇文章换模板 | 自定义字段法 | 极其灵活,可精确到每篇文章 | 需要手动为每篇文章设置 |
| 按条件动态换模板 | 修改PHP文件 | 自动化、逻辑强大 | 需要编程基础,升级可能覆盖 |
| 页面内调用不同样式区块 | 底层模板法 | 组件化思维,高度灵活 | 需要创建多个底层模板文件 |
最佳实践建议:
- 规划先行: 在建站初期就规划好哪些栏目或内容类型需要特殊模板,避免后期大规模修改。
- 命名规范: 模板文件名尽量做到见名知意,如
list_products.htm,article_news_special.htm。 - 善用自定义字段: 对于“单篇文章换模板”的需求,自定义字段是最佳选择,它解耦了内容与模板的硬绑定。
- 备份!备份!备份! 在修改任何文件之前,务必备份你的网站数据和模板文件,以防不测。
掌握了多模板技术,你的DedeCMS网站将不再千篇一律,而是能够根据内容和业务需求,呈现出更加丰富和专业的面貌,希望本篇文章能真正解决你的疑惑,助你在建路上一臂之力!
