DedeCMS的插件系统非常灵活,其模板机制与主站模板无缝集成,理解其工作原理是关键。

核心原理:模板文件命名与路径
DedeCMS的插件模板,其核心在于命名规则和路径,当你调用一个插件的某个功能(比如一个自定义表单、一个自定义的列表页面)时,DedeCMS会根据特定的规则去寻找对应的模板文件。
基本规则:
- 路径:插件模板文件通常存放在
/templets/plus/目录下,这是DedeCMS预设的插件模板目录。 - 命名:模板文件名通常与插件的功能点或自定义标记的名称相关。
插件模板的类型与使用场景
插件模板主要分为两大类:
- 功能页面模板:为插件提供的某个具体功能(如一个表单提交页、一个列表展示页、一个内容详情页)创建的独立HTML模板。
- 自定义标记模板:通过
{dede:mytag}这样的自定义标签,在任意页面(包括主站文章页、首页等)中调用插件功能,并为这个调用指定一个模板。
如何创建和使用插件模板(以自定义表单为例)
假设我们开发了一个“用户反馈”插件,需要在前台展示一个反馈表单。

创建一个独立的反馈页面模板
目标:创建一个 feedback.htm 文件,用户访问 plus/feedback.php 时,系统会自动加载这个模板。
步骤:
-
创建模板文件 在
/templets/plus/目录下,创建一个名为feedback.htm的文件。 -
编写模板内容 在
feedback.htm中,你可以像编写普通主页模板一样,使用Dede的各种标签。
(图片来源网络,侵删)<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户反馈 - {dede:global.cfg_webname/}</title> <meta name="description" content="{dede:global.cfg_description/}"> <link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style/css/style.css"> </head> <body> {dede:include filename="head.htm"/} <!-- 引入头部 --> <div class="main-content"> <h1>用户反馈</h1> <p>感谢您的关注,如有任何问题或建议,请填写以下表单:</p> <!-- 这是关键部分,调用插件生成的表单 --> {dede:feedback name='feedback'/} </div> {dede:include filename="footer.htm"/} <!-- 引入底部 --> </body> </html> -
访问页面 你可以通过访问
你的域名/plus/feedback.php来查看这个页面,系统会自动找到feedback.htm并渲染它。
核心标签解析:
{dede:include filename="head.htm"/}: 引入公共头部模板。{dede:global.cfg_templets_skin/}用来获取当前模板的路径,使资源引用更灵活。{dede:feedback name='feedback'/}: 这是插件的核心调用标签。name='feedback'告诉DedeCMS去调用名为feedback的插件功能,这个标签的具体行为(生成表单)由插件开发者定义,但它的输出内容会被放置在{dede:feedback}标签的位置。
使用自定义标记在任意位置调用插件功能
目标:我们不想创建一个独立页面,而是想在网站首页的某个侧边栏直接显示一个“快速反馈”表单。
步骤:
-
确保插件已注册自定义标记 插件开发者需要在插件中注册一个自定义标记,注册一个名为
myfeedback的标记。 -
创建自定义标记的模板 在
/templets/plus/目录下,创建一个与标记名对应的模板文件,规则通常是标记名.htm,所以我们要创建myfeedback.htm。<!-- /templets/plus/myfeedback.htm --> <style> .quick-feedback { border: 1px solid #ddd; padding: 10px; margin: 10px 0; background: #f9f9f9; } .quick-feedback input, .quick-feedback textarea { width: 100%; margin-bottom: 5px; } </style> <div class="quick-feedback"> <h3>快速反馈</h3> <!-- 调用插件核心逻辑,并指定一个简化的表单模板 --> {dede:feedback name='feedback' formid='quick'/} </div>注意:这里的
{dede:feedback name='feedback' formid='quick'/}是插件内部逻辑,它可能会根据formid参数加载不同的表单字段,我们重点看外层的myfeedback.htm模板。 -
在首页模板中调用 打开你的首页模板文件,
/templets/default/index.htm,在侧边栏的相应位置加入自定义标签。<!-- 在 /templets/default/index.htm 的侧边栏部分 --> <div class="sidebar"> {dede:mytag name='feedback'/} </div> -
访问首页 刷新首页,你就能在侧边栏看到由
myfeedback.htm模板渲染出的“快速反馈”表单了。
核心标签解析:
{dede:mytag name='feedback'/}: 这是自定义标记的调用方式。name='feedback'对应插件中注册的标记名称。- 当DedeCMS解析这个标签时,它会自动去
/templets/plus/目录下寻找feedback.htm作为模板。 - 如果你想指定一个不同的模板文件,可以使用
tempid属性(如果插件支持),或者直接使用文件名:{dede:mytag name='feedback' template='myfeedback.htm'/},但更常见的做法是直接创建与标记名同名的模板文件。
常用Dede标签在插件模板中的使用
在插件模板中,你可以使用所有DedeCMS主站模板支持的标签,让插件内容与主站风格保持一致。
| 标签类别 | 标签名称 | 作用 | 示例 |
|---|---|---|---|
| 全局变量 | global |
获取系统全局配置 | {dede:global.cfg_webname/} (网站名称){dede:global.cfg_templets_skin/} (当前模板目录) |
| 栏目列表 | channel |
获取栏目列表 | {dede:channel type='top' row='8'}<a href='[field:typelink/]'>[field:typename/]</a>{/dede:channel} (调用顶级栏目) |
| 文章列表 | arclist |
获取文章列表 | {dede:arclist titlelen='30' row='10' typeid='1'}<li><a href='[field:arcurl/]'>[field:title/]</a></li>{/dede:arclist} (调用栏目ID为1的最新10篇文章,标题30字) |
field |
在文章详情页获取字段 | {dede:field.title/} (文章标题){dede:field.body/} (文章正文){dede:field.pubdate function='MyDate('Y-m-d H:i',@me)'/} (发布日期,使用函数格式化) |
|
| 分页 | pagelist |
生成分页代码 | {dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'/} |
| 循环 | foreach |
遍历数组或对象 | {dede:foreach item='li' from='@arr'}[li]{/dede:foreach} |
| 常量/变量 | var |
获取PHP变量 | {dede:var.name/} (获取PHP中赋值的 $GLOBALS['var']['name']) |
最佳实践与注意事项
-
路径问题:
- 在插件模板中引用CSS、JS、图片等静态资源时,强烈推荐使用
{dede:global.cfg_templets_skin/}来构建绝对路径,避免路径错误。<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/css/myplugin.css"> <img src="{dede:global.cfg_templets_skin/}/images/logo.png" alt="logo">
- 在插件模板中引用CSS、JS、图片等静态资源时,强烈推荐使用
-
与主站模板分离:
- 为了避免升级模板时覆盖插件模板,建议在
/templets/plus/下为你的插件创建一个专属文件夹,/templets/plus/myplugin/,然后将所有插件模板文件放在里面。 - 调用时,通过
template属性指定路径:{dede:mytag name='feedback' template='myplugin/feedback.htm'/}。
- 为了避免升级模板时覆盖插件模板,建议在
-
理解标签属性:
- 仔细阅读插件的文档,了解其自定义标记支持哪些属性(如
row,typeid,titlelen,cacheid等),这些属性能让你更灵活地控制输出内容。
- 仔细阅读插件的文档,了解其自定义标记支持哪些属性(如
-
缓存机制:
- DedeCMS默认会对页面进行缓存,如果你在插件模板中修改了内容但看不到变化,可以尝试在后台“系统” -> “性能选项”中清空所有缓存,或者给标签加上
cache='no'属性(如果支持)来禁用缓存。
- DedeCMS默认会对页面进行缓存,如果你在插件模板中修改了内容但看不到变化,可以尝试在后台“系统” -> “性能选项”中清空所有缓存,或者给标签加上
-
PHP代码:
- 在模板中写PHP代码是最后的选择,可以使用
{dede:php}...{/dede:php}标签,但这会破坏模板的易用性,应尽量避免,尽量将逻辑放在插件文件中。
- 在模板中写PHP代码是最后的选择,可以使用
创建和使用Dede插件模板的核心流程如下:
- 确定模板类型:是需要一个独立的功能页面,还是一个可嵌入的自定义标记块。
- 创建模板文件:
- 独立页面:在
/templets/plus/下创建功能名.htm(如feedback.htm)。 - 自定义标记:在
/templets/plus/下创建标记名.htm(如myfeedback.htm)。
- 独立页面:在
- 编写模板内容:在HTML中嵌入Dede标签来调用数据、引入公共部分,并使用
{dede:插件标记名/}来调用插件的核心功能。 - 在相应位置调用:
- 独立页面:通过
plus/功能名.php访问。 - 自定义标记:在任意模板文件中使用
{dede:标记名/}调用。
- 独立页面:通过
- 注意路径和缓存:使用全局变量构建路径,必要时清空缓存。
掌握了这套流程,你就可以为任何DedeCMS插件创建出功能强大且与网站风格完美融合的模板了。
