dede如何同时调用两个不同模板?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 DEDE建站 正文

DedeCMS实用教程:一文详解如何制作并调用两个不同模板(附代码示例)

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

dede如何做两个模板
(图片来源网络,侵删)

引言:为什么你的DedeCMS网站需要两个不同的模板?

作为一名DedeCMS用户,你是否曾遇到过这样的困惑:

  • 首页和栏目页风格迥异: 首页设计得精美大气,但进入栏目后却发现样式单调,缺乏吸引力。
  • 不同栏目需要不同布局: 公司新闻列表可能只需要标题和日期,而产品展示列表则需要图片、简介和价格。
  • 需要特殊展示: 活动专题”页面,你希望它拥有完全不同于常规页面的布局和样式。

这些问题的核心,都指向了同一个解决方案:为网站的不同部分制作和使用不同的模板,掌握“dede如何做两个模板”的技能,是每一位进阶DedeCMS开发者的必备能力,本文将为你彻底揭开多模板配置的神秘面纱。


核心概念:DedeCMS模板是如何工作的?

在动手之前,我们先花一分钟理解DedeCMS的模板机制,这有助于你从根本上解决问题,而不是死记硬背操作步骤。

DedeCMS的模板引擎(dede/template.class.php)在渲染页面时,会遵循一套优先级规则来寻找并加载对应的模板文件,这个规则可以简化为:

优先级从高到低:

  1. 硬编码指定: 在PHP程序文件中,通过 GetTemplets()include 函数明确指定模板路径。
  2. 自定义字段/参数指定: 通过文章的自定义字段、栏目参数等,关联到特定的模板。
  3. 默认规则查找: 根据当前页面的类型(首页、列表页、文章页等),按照默认的文件名规则去 /templets/ 目录下查找。

默认模板文件名规则:

  • 首页: index.htm
  • 列表页: list_栏目ID.htmlist_栏目目录.htm
  • 文章页: article_栏目ID.htmarticle_栏目目录.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:在后台指定栏目模板

  1. 登录你的DedeCMS后台。
  2. 进入【核心】 -> 【栏目管理】。
  3. 找到并点击你想要应用新模板的栏目,产品中心”。
  4. 在栏目编辑页面,找到 “列表选项”“高级选项” 标签页。
  5. 找到 “列表模板(list)” 这一栏,默认值可能是 list_default.htm 或空。
  6. 直接输入你新创建的模板文件名,不带路径,即:list_products.htm
  7. 保存更改。

效果: 当你访问“产品中心”栏目的列表页时,DedeCMS就会自动加载 /templets/default/list_products.htm 而不是默认的 list.htm页模板的设置方法完全相同,只需在“文章选项”中设置“文章模板(article)”即可。


实战场景二:为指定文章或文章类型使用独立模板

我们不需要整个栏目换模板,而是某几篇文章或者某一类文章需要特殊展示。

方法A:通过文章自定义字段实现(推荐)

这种方法非常灵活,可以自由指定任意文章使用哪个模板。

步骤1:创建新的内容页模板

创建一个新的内容页模板,/templets/default/article_special.htm,这个模板可以包含特殊的布局,比如侧边栏、下载链接、视频播放器等。

步骤2:在后台添加自定义字段

  1. 进入【核心】 -> 【内容模型管理】 -> 选择你的内容模型(如“文章”)-> 【管理字段】。
  2. 点击 “添加新字段”
  3. 字段名称: 填写 templet (字段名只能用英文、数字和下划线)。
    • 填写 指定模板 (这个会在后台文章编辑时显示)。
    • 字段类型: 选择 “文本框”
    • 字段参数: 可以填写一些提示文字,如 请输入模板文件名,如 article_special.htm
    • 保存。

步骤3:发布文章时指定模板

  1. 当你发布或编辑一篇文章时,在文章编辑页面的下方,会多出一个你刚刚创建的 “指定模板” 文本框。
  2. 在这个框中,输入你想要使用的模板文件名,article_special.htm
  3. 生成或更新文章。

原理: 当DedeCMS准备渲染文章页时,它会先检查文章的自定义字段中是否有名为 templet 的字段,如果有,并且值不为空,系统就会优先加载这个字段指定的模板文件。

方法B:通过修改PHP文件实现(进阶)

如果你希望根据文章的某个属性(比如一个自定义的分类)来动态切换模板,可以修改文章内容页的PHP文件。

  1. 找到并打开文章内容页的PHP文件,通常位于 /plus/ 目录下,文件名为 view.php
  2. 在文件中找到处理文章数据的核心逻辑部分,一般在 require_once(DEDEINC.'/view.class.php');$arc->Display() 之间。
  3. 添加你的判断逻辑。

示例代码:

假设你有一个自定义字段 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配合底层模板来实现。

示例:在首页调用一个“活动预告”模块,使用特殊样式。

  1. 创建底层模板:/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>
  2. 在首页调用: 在你的首页模板 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文件 自动化、逻辑强大 需要编程基础,升级可能覆盖
页面内调用不同样式区块 底层模板法 组件化思维,高度灵活 需要创建多个底层模板文件

最佳实践建议:

  1. 规划先行: 在建站初期就规划好哪些栏目或内容类型需要特殊模板,避免后期大规模修改。
  2. 命名规范: 模板文件名尽量做到见名知意,如 list_products.htm, article_news_special.htm
  3. 善用自定义字段: 对于“单篇文章换模板”的需求,自定义字段是最佳选择,它解耦了内容与模板的硬绑定。
  4. 备份!备份!备份! 在修改任何文件之前,务必备份你的网站数据和模板文件,以防不测。

掌握了多模板技术,你的DedeCMS网站将不再千篇一律,而是能够根据内容和业务需求,呈现出更加丰富和专业的面貌,希望本篇文章能真正解决你的疑惑,助你在建路上一臂之力!


-- 展开阅读全文 --
头像
notepad如何编辑运行C语言?
« 上一篇 02-26
织梦上传服务器步骤是什么?
下一篇 » 02-26

相关文章

取消
微信二维码
支付宝二维码

目录[+]