- 理解DedeCMS网址导航的数据结构
- 准备和规划新模板
- 制作模板文件
- 后台设置与调用
- 进阶开发技巧
第一步:理解DedeCMS网址导航的数据结构
在开始制作模板之前,你必须清楚后台的数据是如何存储的,网址导航的核心数据表是 #@nav。

(图片来源网络,侵删)
我们可以进入DedeCMS后台 -> 核心 -> 内容模型管理 -> 网址导航 -> 字段管理,查看所有可用的字段。
核心字段解释:
id: 导航项的唯一ID。typename: 导航分类的名称(常用网站、娱乐、学习等)。reid: 父级分类ID,如果为0,则表示这是一个顶级分类。typenamerule: 分类页面的命名规则,通常我们不需要在模板中直接使用它。namerule2: 单个网址页面的命名规则,同样在模板中较少直接使用。typedir: 这是最重要的字段之一,它定义了分类在网站上的访问路径,a/gongju/。seotitle: 分类页面的SEO标题。description: 分类页面的描述。keywords: 分类页面的关键词。 表 (#@nav_data或dede_addon17等,根据你的模型ID不同而不同):**
这个表存储了具体的网址信息。
aid: 关联到#@nav表中的id。typeid: 导航分类ID,关联到#@nav表中的id。url: 网站的链接地址。webname: 网站名称。msg: 网站简介。logo: 网站Logo图片地址。sortrank: 排序权重,数字越大越靠前。
- 分类:由
#@nav表管理,reid=0的是顶级分类。 - 网址:由
#@nav_data表管理,通过typeid字段归属到某个分类。
第二步:准备和规划新模板
在动手写代码前,先在纸上或设计软件中规划好你的网址导航首页长什么样。

(图片来源网络,侵删)
规划示例:
- 页面头部:网站Logo、搜索框、用户登录入口。
- 主导航栏:首页、关于我们、联系方式等。
- Banner区:一张全宽的轮播图。
- 分类展示区:这是核心部分。
- 采用什么布局?是传统的“一列分类+网址列表”,还是流行的“卡片式”或“瀑布流”?
- 每个分类区块如何设计?分类图标、分类名称、查看更多按钮。
- 网址列表如何展示?是纯文字列表,还是带Logo的图标列表?
- 页脚:版权信息、备案号、友情链接等。
文件准备:
将你的设计稿切图,得到Logo、Banner图、图标等素材,并上传到DedeCMS的 images 目录或自定义目录。
第三步:制作模板文件
DedeCMS的模板文件存放在 /templets/default/ 目录下,为了不覆盖默认模板,建议你新建一个文件夹,/templets/your_template_name/。

(图片来源网络,侵删)
我们将制作两个核心模板文件:
- 首页模板:
index.htm - 列表页模板:
list_type.htm(用于显示某个分类下的所有网址)
首页模板 (index.htm)
这个模板用于显示所有顶级分类及其下的网址。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/} - {dede:global.cfg_description/}</title>
<meta name="keywords" content="{dede:global.cfg_keywords/}">
<meta name="description" content="{dede:global.cfg_description/}">
<!-- 引入CSS文件,建议新建一个style.css -->
<link rel="stylesheet" href="{dede:global.cfg_cmspath/}/templets/your_template_name/css/style.css">
{dede:global.cfg_webstyle/}
</head>
<body>
<!-- 头部 -->
{dede:include filename="head.htm"/}
<!-- Banner区,可以调用一个自定义的单页内容或直接写死 -->
<div class="banner">
<img src="{dede:global.cfg_cmspath/}/templets/your_template/images/banner.jpg" alt="网站导航Banner">
</div>
<!-- 核心内容区:循环调用顶级分类 -->
<div class="main-content">
{dede:channel type='top' currentstyle='
<div class="category-box current">
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
[field:content /]
</div>
'}
<div class="category-box">
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<!-- [field:content /] 是一个关键,它会在后台“分类管理”-“分类内容”里填写 -->
{dede:sql sql="SELECT * FROM `#@nav_data` WHERE typeid = '~id~' ORDER BY sortrank DESC limit 10"}
<div class="site-item">
<a href="[field:url/]" target="_blank">
<img src="[field:logo/]" alt="[field:webname/]">
<span>[field:webname/]</span>
</a>
</div>
{/dede:sql}
</div>
{/dede:channel}
</div>
<!-- 页脚 -->
{dede:include filename="foot.htm"/}
<!-- 引入JS文件 -->
<script src="{dede:global.cfg_cmspath/}/templets/your_template_name/js/jquery.min.js"></script>
<script src="{dede:global.cfg_cmspath/}/templets/your_template_name/js/main.js"></script>
</body>
</html>
代码解析:
{dede:channel type='top' ...}: 这是核心标签。type='top'表示只调用顶级分类。currentstyle: 当前分类的样式,如果想让当前分类高亮,可以用这个。[field:typelink/]: 分类链接。[field:typename/]: 分类名称。[field:content /]: 这是一个非常重要的技巧! 在后台的“网址导航” -> “分类管理”里,编辑每个顶级分类时,你可以在“分类内容”这个文本框里填写任意HTML代码,比如分类的描述、广告语等,这样,首页模板就可以直接调用出来了,非常灵活。{dede:sql ...}: 这是一个万能的SQL查询标签,我们用它来根据当前分类的ID (~id~会被自动替换为分类ID) 去查询#@nav_data表,获取该分类下的网址。ORDER BY sortrank DESC limit 10: 按后台设置的排序权重降序排列,并只显示前10个。
列表页模板 (list_type.htm)
这个模板用于显示单个分类下的所有网址,通常更简洁。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">{dede:field.seotitle/}_{dede:global.cfg_webname/}</title>
<meta name="keywords" content="{dede:field.keywords/}">
<meta name="description" content="{dede:field.description/}">
<link rel="stylesheet" href="{dede:global.cfg_cmspath/}/templets/your_template_name/css/style.css">
</head>
<body>
<!-- 头部 -->
{dede:include filename="head.htm"/}
<!-- 面包屑导航 -->
<div class="breadcrumb">
<a href="{dede:global.cfg_cmspath/}">首页</a> > {dede:field name='position' runphp='yes'}
@me = str_replace(' > ', ' » ', @me);
{/dede:field}
</div>
<!-- 列表内容区 -->
<div class="list-container">
<h1 class="category-title">{dede:field.typename/}</h1>
<p class="category-desc">{dede:field.description/}</p>
<div class="site-list">
{dede:sql sql="SELECT * FROM `#@nav_data` WHERE typeid = '~typeid~' ORDER BY sortrank ASC"}
<div class="site-card">
<a href="[field:url/]" target="_blank" class="site-link">
<img src="[field:logo/]" alt="[field:webname/]" class="site-logo">
<div class="site-info">
<h3>[field:webname/]</h3>
<p>[field:msg/]</p>
</div>
</a>
</div>
{/dede:sql}
</div>
</div>
<!-- 页脚 -->
{dede:include filename="foot.htm"/}
<script src="{dede:global.cfg_cmspath/}/templets/your_template_name/js/jquery.min.js"></script>
</body>
</html>
代码解析:
{dede:field.seotitle/},{dede:field.keywords/},{dede:field.description/}: 调用当前分类的SEO信息。{dede:field name='position'}: 调用面包屑导航。{dede:field.typename/},{dede:field.description/}: 调用当前分类的名称和描述。{dede:sql sql="SELECT * FROM#@nav_dataWHERE typeid = '~typeid~' ...}: 和首页类似,这里直接用~typeid~获取当前分类ID,查询该分类下的所有网址。
第四步:后台设置与调用
- 上传模板:将你制作好的
index.htm,list_type.htm,head.htm,foot.htm以及css和js文件上传到/templets/your_template_name/目录下。 - 设置默认模板:
- 进入DedeCMS后台 -> 模板 -> 默认模板管理。
- 在“网址导航”模型下,找到“首页模板”、“列表页模板”等。
- 分别选择你刚刚上传的
index.htm和list_type.htm。
- 添加分类和网址:
- 进入“网址导航” -> “分类管理”,添加你的顶级分类和子分类。
- 在每个分类的“分类内容”里填写你为首页准备的HTML代码。
- 进入“网址管理”,添加具体的网址,并选择它们所属的分类。
- 生成网站:
进入“生成” -> “一键更新网站”,选择“更新主页”、“更新栏目页”和“更新文档页”,然后开始生成。
你的新网址导航模板应该就能正常显示了。
第五步:进阶开发技巧
-
使用自定义模型和字段:
- 默认的字段可能不够用(比如需要添加“网站标签”、“站长QQ”等)。
- 你可以在“内容模型管理” -> “网址导航” -> “字段管理”中添加新的字段,然后在模板中通过
{dede:field.新字段名/}来调用。
-
使用arclist标签:
- 对于一些简单的调用,
arclist标签比sql标签更方便,尤其是在需要分页时。 - 调用某个分类下的网址(假设分类ID是5):
{dede:arclist typeid='5' channelid='17' row='20' orderby='sortrank'} <a href="[field:url/]" target="_blank">[field:webname/]</a> {/dede:arclist}typeid='5': 指定分类ID。channelid='17': 非常关键!channelid是网址导航模型的ID,你可以在“内容模型管理”里看到网址导航模型的ID,通常是17或更大,不指定则调用不了。row='20': 显示20条。orderby='sortrank': 按排序权重。
- 对于一些简单的调用,
-
增加交互功能:
- 搜索功能:可以新建一个搜索页面模板,使用
{dede:global name='keyword' function='RemoveXSS(@me)'/}获取搜索关键词,然后用sql标签在#@nav_data表的webname和msg字段中进行模糊查询。 - 提交网址:制作一个提交页面,使用DedeCMS的自定义表单功能,让用户填写网站信息,后台审核后再手动添加到网址列表中。
- 搜索功能:可以新建一个搜索页面模板,使用
通过以上步骤,你就可以从零开始,为织梦DedeCMS打造一个功能完善、外观精美的网址导航网站了,祝你开发顺利!
