织梦网站模板制作教程:从入门到精通
第一部分:准备工作与核心概念
在开始之前,你需要了解以下准备工作:
-
本地环境:你需要一个本地的 PHP 运行环境,最简单的方式是安装集成环境包,
- phpStudy (推荐,一键安装,功能齐全)
- XAMPP (跨平台,功能稳定)
- 宝塔面板 (如果你习惯用图形化管理服务器)
-
织梦程序:从织梦官方下载最新稳定版的 DedeCMS 程序,并解压到你的本地环境的网站根目录(如
phpStudy的WWW文件夹)。 -
代码编辑器:一个功能强大的代码编辑器能让你事半功倍,推荐:
- VS Code (免费、强大、插件丰富)
- Sublime Text
- Dreamweaver
-
设计稿:在制作模板前,最好有一张网站的设计稿(.psd 或 .jpg 文件),这将是你的制作蓝图。
第二部分:理解织梦模板的核心机制
织梦模板的核心思想是 “分离”,它将网站的 HTML 结构、CSS 样式 和 PHP 数据 分离开来,通过特定的标签进行调用。
- HTML 模板文件:这是网站的骨架,包含 HTML 和织梦的 模板标签。
- CSS 文件:负责网站的样式和布局。
- JS 文件:负责网站的交互效果。
- 织梦标签:这是织梦的魔法,它们是类似
{dede:...}的标记,用于从数据库中获取内容并动态显示在页面上。
模板文件命名规则:
- 首页模板文件名:
index.htm - 列表页模板文件名:
list_栏目ID.htm(list_1.htm)页模板文件名:article_栏目ID.htm(article_1.htm) - 其他页面(如搜索页、联系页等):可以自定义,如
search.htm,contact.htm。
第三部分:实战!制作一个简单的企业网站模板
我们将以一个典型的企业网站首页为例,分步讲解。
步骤 1:创建基础 HTML 结构
用你的设计稿,编写一个标准的 HTML5 文件,这只是一个静态的页面,不包含任何织梦标签。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">我的公司 - 首页</title>
<link rel="stylesheet" href="/templets/default/style/css/style.css">
</head>
<body>
<!-- 顶部导航栏 -->
<div class="top-bar">
...
</div>
<!-- 头部 Logo 和主导航 -->
<header class="main-header">
...
</header>
<!-- Banner 轮播图 -->
<section class="banner">
...
</section>
<!-- 公司简介 -->
<section class="about-us">
...
</section>
<!-- 产品展示 -->
<section class="products">
...
</section>
<!-- 底部信息 -->
<footer class="footer">
...
</footer>
<script src="/templets/default/style/js/jquery.min.js"></script>
<script src="/templets/default/style/js/main.js"></script>
</body>
</html>
注意:
- 我们把 CSS 和 JS 文件放在了
/templets/default/style/目录下,这是织梦模板的常用结构。 default是模板的目录名,你可以自定义。
步骤 2:织梦标签替换 - 让页面“活”起来
我们将用织梦标签替换掉 HTML 中的静态内容。
头部信息替换 (<head> 部分)
<head>
<meta charset="UTF-8">
<!-- 织梦系统自动生成的 head 内容,包含标题、关键词、描述等 -->
{dede:include filename="head.htm"/}
<!-- 如果需要自定义 CSS 或 JS,可以这样引入 -->
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style/css/style.css">
</head>
{dede:include filename="head.htm"/}:这是一个包含文件标签,它会引入head.htm的内容。head.htm通常包含网站的<title>、<meta>等信息,我们也可以直接在这里写。{dede:global.cfg_templets_skin/}:这是一个全局变量,代表当前模板的路径,如/templets/default,使用它能让模板更具可移植性。
Logo 和主导航替换
<header class="main-header">
<div class="logo">
<!-- 织梦的全站站名链接 -->
<a href="{dede:global.cfg_cmsurl/}/">{dede:global.cfg_webname/}</a>
</div>
<nav class="main-nav">
<!-- 调用主导航菜单 -->
{dede:channel type='top' row='8'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
</nav>
</header>
{dede:global.cfg_webname/}:调用网站后台设置的“网站名称”。{dede:channel type='top' row='8'}:调用顶级栏目,最多显示 8 个。type='top':表示调用顶级栏目。row='8':表示显示 8 条。[field:typelink/]:栏目链接。[field:typename/]:栏目名称。
Banner 轮播图替换
假设我们在后台创建了一个名为 “首页幻灯片” 的自由列表(或者使用图集模型),我们可以这样调用。
<section class="banner">
<!-- 使用 channelartlist 标签可以获取指定栏目的内容 -->
{dede:channelartlist typeid='1'}
<div class="slide">
<!-- 调用栏目下的文章列表,只取第一张图片作为 Banner -->
{dede:arclist row='1' titlelen='30'}
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
</a>
{/dede:arclist}
</div>
{/dede:channelartlist}
</section>
typeid='1':指定调用 ID 为 1 的栏目下的内容。{dede:arclist}:文章列表标签,非常常用。row='1':只调用一篇文章。[field:litpic/]:文章的缩略图。[field:arcurl/]:文章的链接。[field:title/]:文章的标题。
公司简介替换
<section class="about-us">
<h2>公司简介</h2>
<!-- 调用指定 ID 为 1 的栏目的描述 -->
{dede:field name='description' function='htmlspecialchars(@me)'/}
</section>
{dede:field name='description'...}:调用当前栏目的描述信息,在首页,它通常调用网站的全局描述。
产品展示替换
<section class="products">
<h2>产品展示</h2>
<div class="product-list">
<!-- 调用产品栏目(假设ID为3)下的文章列表 -->
{dede:arclist typeid='3' row='6' titlelen='20' imgwidth='220' imgheight='220'}
<div class="product-item">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
</a>
</div>
{/dede:arclist}
</div>
</section>
typeid='3':指定调用 ID 为 3 的“产品”栏目。row='6':显示 6 个产品,len='20'`:标题长度限制为 20 个字符。imgwidth='220'和imgheight='220':自动缩略图尺寸。
底部信息替换
<footer class="footer">
<p>版权所有 © 2025 {dede:global.cfg_webname/} All Rights Reserved.</p>
<p>技术支持:<a href="http://www.dedecms.com">织梦科技</a></p>
</footer>
步骤 3:CSS 样式美化
你的网站结构已经完成,但看起来还很简陋,打开 /templets/default/style/css/style.css 文件,编写 CSS 代码来美化你的网站。
/* body 基础样式 */
body {
font-family: 'Microsoft YaHei', sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
background-color: #f4f4f4;
}
/* 头部样式 */
.main-header {
background-color: #333;
color: #fff;
padding: 20px 0;
display: flex;
justify-content: space-between;
align-items: center;
}
.main-header .logo a {
color: #fff;
font-size: 24px;
text-decoration: none;
}
.main-header .main-nav a {
color: #fff;
margin-left: 20px;
text-decoration: none;
}
/* 产品列表样式 */
.product-list {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.product-item {
width: 30%;
margin-bottom: 20px;
background: #fff;
padding: 15px;
box-shadow: 0 0 5px rgba(0,0,0,0.1);
}
.product-item img {
width: 100%;
height: auto;
}
关于响应式:
为了让你的网站在手机上也能正常显示,你需要使用 媒体查询,在 style.css 的末尾添加:
/* 响应式设计 */
@media screen and (max-width: 768px) {
.main-header {
flex-direction: column;
}
.main-nav {
margin-top: 15px;
}
.product-list {
flex-direction: column;
}
.product-item {
width: 100%;
}
}
步骤 4:后台设置与模板上传
-
上传模板:将你制作好的整个模板文件夹(
mycompany_template)通过 FTP 或其他方式上传到网站的/templets/目录下。 -
后台设置:
- 登录织梦后台。
- 进入 【系统】-> 【系统基本参数】-> 核心设置****。
- 找到 “模板默认目录”,将其修改为你的模板目录名,如
mycompany_template。 - 保存。
-
生成首页:
- 进入 【生成】-> 一键生成网站****。
- 点击 “更新主页”。
- 系统会根据你的
index.htm模板文件,生成一个静态的 HTML 首页文件。
-
访问网站:清空浏览器缓存,访问你的网站首页,你应该能看到一个由织梦动态生成、但外观完全符合你设计稿的网站了!
第四部分:进阶技巧与常见问题
-
模板文件拆分:
- 对于复杂的网站,可以将
header、footer、nav等公共部分拆分成独立的文件(如header.htm,footer.htm),然后在各个页面模板中使用{dede:include filename='header.htm'/}来引入,这能极大提高开发效率和后期维护性。
- 对于复杂的网站,可以将
-
常用织梦标签速查:
{dede:include}:包含文件。{dede:global}:调用全局变量(如网站名称、路径等)。{dede:field}:调用栏目或文档的字段(如描述、内容等)。{dede:channel}:调用栏目列表。{dede:arclist}:调用文章列表,功能最强大,参数也最多。{dede:loop}:循环执行SQL语句,非常灵活。{dede:myad}:调用广告。{dede:php}**:在模板中直接执行 PHP 代码。
-
常见问题:
- Q: 为什么我的标签不显示,或者显示
{dede:...}这样的源码?- A: 99% 的原因是 文件编码问题,请确保你的 HTML 模板文件(如
index.htm)是 UTF-8 无 BOM 格式 编码,VS Code 和 Sublime Text 都可以轻松转换文件编码。
- A: 99% 的原因是 文件编码问题,请确保你的 HTML 模板文件(如
- Q: 为什么首页生成很慢?
- A: 首页调用了很多数据,特别是使用了
{dede:arclist}且row值较大时,会很慢,可以尝试优化 SQL 查询,或者使用更高效的标签组合。
- A: 首页调用了很多数据,特别是使用了
- Q: 如何制作列表页和内容页?
- A: 列表页 (
list_*.htm) 通常使用{dede:channelartlist}或{dede:list}标签来循环显示栏目下的文章,内容页 (article_*.htm) 则使用{dede:field.body/}来调用文章正文,并配合{dede:field.title/}、{dede:field.pubdate}等标签显示文章的其他信息。
- A: 列表页 (
- Q: 为什么我的标签不显示,或者显示
织梦模板制作的核心在于 “理解模板结构” 和 “熟练使用织梦标签”,本教程为你提供了一个从零到一的完整流程,最好的学习方式就是 动手实践。
- 先模仿本教程做一个简单的模板。
- 尝试修改设计,制作一个更复杂的页面。
- 不断查阅官方文档和社区资源,探索更多高级标签和技巧。
祝你织梦愉快!
