下面我将从“如何使用系统自带模块”和“如何开发自定义模块”两个方面,为你详细讲解织梦模板中增加模块的方法。
使用系统自带模块(推荐新手)
织梦本身内置了一些功能强大的模块,如“单页面管理”、“专题管理”、“留言簿”等,你只需要在后台启用并配置它们,然后在模板中调用即可。
增加一个“关于我们”单页
这是最常见的需求,比如首页底部或页脚的“关于我们”、“联系我们”等链接。
步骤 1:在后台创建单页
- 登录织梦后台。
- 在左侧菜单栏找到 【栏目管理】 -> 【添加栏目】。
- 在弹出的页面中,填写栏目信息:
- 栏目名称:填写
关于我们。 - 栏目类型:务必选择
单页栏目。 - :在这里直接输入“关于我们”页面的所有文字、图片等内容,你也可以使用编辑器的可视化模式进行排版。
- 其他选项:如栏目目录、是否生成等,根据需要设置即可。
- 点击 【确定】 保存。
- 栏目名称:填写
步骤 2:在模板中调用
创建好单页后,它就会像一个普通栏目一样存在,你可以在任何模板文件中通过调用标签来显示它。
方法 1:使用 arclist 标签(推荐)
arclist 是织梦最强大的列表标签,也可以用来调用单页。
{dede:arclist typeid='这里填你的单页栏目ID' row='1'}
<a href="[field:arcurl/]">[field:title/]</a>
<div>
[field:body/]
</div>
{/dede:arclist}
typeid:填入你在第一步创建的“关于我们”栏目的ID,你可以在【栏目管理】中查看每个栏目的ID。row='1':因为我们只需要调用这一个单页,所以设置为1。[field:arcurl/]:获取该单页的链接地址。[field:title/]:获取该单页的标题。[field:body/]:获取该单页的内容。
方法 2:使用 type
type 标签专门用于调用栏目信息。
{dede:type typeid='这里填你的单页栏目ID'}
<a href="[field:typelink/]">[field:title/]</a>
<div>
[field:description function='htmlspecialchars(@me)'/]
</div>
{/dede:type}
[field:typelink/]:获取栏目链接。[field:description/]:获取栏目内容(注意:单页内容是存在description字段里的,而不是body)。
步骤 3:生成并预览
修改完模板后,去后台 【生成】 -> 【一键生成】**,生成你的网站,然后刷新前台页面,就能看到“关于我们”的内容了。
开发自定义模块(进阶)
当系统自带的模块无法满足你的需求时,比如你需要一个“产品案例”、“团队介绍”等有特定结构和功能的模块,就需要进行二次开发。
开发一个自定义模块通常分为以下几步:
- 创建数据表:存储模块的数据。
- 后台管理模块:在后台添加管理界面,用于增、删、改、查数据。
- 前台模板调用:在前台模板中使用标签调用数据并展示。
开发一个“产品案例”模块
假设我们要做一个“产品案例”模块,每个案例包含:案例名称、缩略图、简介、详细内容。
步骤 1:创建数据表
-
登录你的网站数据库管理工具(如 phpMyAdmin)。
-
找到织梦的数据库,执行以下SQL语句,创建一个名为
dede_product_case的表。CREATE TABLE `dede_product_case` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `title` varchar(100) NOT NULL COMMENT '案例标题', `litpic` varchar(255) NOT NULL COMMENT '缩略图', `description` text NOT NULL COMMENT '案例简介', `content` text NOT NULL COMMENT '案例详细内容', `addtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
步骤 2:创建后台管理模块
这是最复杂的一步,我们需要修改或创建几个文件。
-
创建主菜单入口文件:
dede/templets/product_case_main.htm这个文件是后台管理界面的主框架。<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>产品案例管理</title> <link rel="stylesheet" href="static/css/bootstrap.min.css"> </head> <body> <div class="container-fluid"> <h2>产品案例管理</h2> <a href="product_case_add.php" class="btn btn-primary">添加新案例</a> <hr> <!-- 这里将动态加载案例列表 --> <iframe id="listFrame" name="listFrame" src="product_case_list.php" width="100%" height="600px" frameborder="0"></iframe> </div> </body> </html> -
创建列表页面:
dede/product_case_list.php这个文件负责显示案例列表,并提供删除操作。<?php require_once(dirname(__FILE__)."/config.php"); CheckPurview('product_case'); // 引入列表处理函数 require_once(DEDEINC."/inc/inc_fun_list.php"); // 设置表名和主键 $dsql->SetQuery("SELECT * FROM `#@__product_case` ORDER BY id DESC"); $dsql->Execute(); $list = array(); while($row = $dsql->GetArray()) { $list[] = $row; } ?> <table class="table table-striped"> <thead> <tr> <th>ID</th> <th>标题</th> <th>缩略图</th> <th>简介</th> <th>添加时间</th> <th>操作</th> </tr> </thead> <tbody> <?php foreach($list as $item): ?> <tr> <td><?php echo $item['id']; ?></td> <td><?php echo $item['title']; ?></td> <td><img src="<?php echo $item['litpic']; ?>" width="50"></td> <td><?php echo mb_substr($item['description'], 0, 50, 'utf-8').'...'; ?></td> <td><?php echo date('Y-m-d H:i:s', $item['addtime']); ?></td> <td> <a href="product_case_edit.php?id=<?php echo $item['id']; ?>" class="btn btn-sm btn-info">编辑</a> <a href="javascript:;" onclick="del(<?php echo $item['id']; ?>)" class="btn btn-sm btn-danger">删除</a> </td> </tr> <?php endforeach; ?> </tbody> </table> <script> function del(id) { if(confirm('确定要删除吗?')) { window.location.href = 'product_case_do.php?dopost=del&id=' + id; } } </script> -
创建添加页面:
dede/product_case_add.php这个页面是添加案例的表单。<?php require_once(dirname(__FILE__)."/config.php"); CheckPurview('product_case'); if(isset($_POST['submit'])) { $title = $_POST['title']; $litpic = $_POST['litpic']; $description = $_POST['description']; $content = $_POST['content']; $addtime = time(); $sql = "INSERT INTO `#@__product_case` (title, litpic, description, content, addtime) VALUES ('$title', '$litpic', '$description', '$content', $addtime)"; if($dsql->ExecuteNoneQuery($sql)) { ShowMsg('添加成功!', 'product_case_main.php'); exit(); } else { ShowMsg('添加失败!', '-1'); exit(); } } ?> <form method="post" action=""> <div class="form-group"> <label>标题:</label> <input type="text" name="title" class="form-control" required> </div> <div class="form-group"> <label>缩略图:</label> <input type="text" name="litpic" class="form-control" required> </div> <div class="form-group"> <label>简介:</label> <textarea name="description" class="form-control" required></textarea> </div> <div class="form-group"> <label>详细内容:</label> <textarea name="content" class="form-control" id="content" required></textarea> </div> <button type="submit" name="submit" class="btn btn-primary">提交</button> </form> <script src="static/js/jquery.min.js"></script> <script src="static/js/ckeditor/ckeditor.js"></script> <script> CKEDITOR.replace('content'); </script> -
创建编辑页面:
dede/product_case_edit.php这个页面与添加页面类似,但需要先从数据库读取已有数据并填充到表单中,然后更新数据,逻辑与add.php类似,只是SQL语句从INSERT变为UPDATE。 -
创建数据处理文件:
dede/product_case_do.php用于处理删除等操作。<?php require_once(dirname(__FILE__)."/config.php"); CheckPurview('product_case'); $dopost = $_GET['dopost']; $id = $_GET['id']; if($dopost == 'del') { $dsql->ExecuteNoneQuery("DELETE FROM `#@__product_case` WHERE id=$id"); ShowMsg('删除成功!', 'product_case_main.php'); exit(); } ?> -
在后台菜单中添加入口 打开
dede/templets/index_menu2.htm文件,在合适的位置添加一行,将你的模块添加到后台菜单中。<li><a href='product_case_main.php' target='main'><i class='fa fa-cube'></i> 产品案例管理</a></li>
步骤 3:创建前台模板调用标签
为了让前台能方便地调用数据,我们需要创建一个自定义标签。
-
创建标签处理文件:
/include/taglib/product_case.lib.php这个文件定义了标签如何从数据库获取数据。<?php if(!defined('DEDEINC')) exit('dedecms'); function lib_product_case(&$ctag, &$refObj) { global $dsql; $attlist = "row|12,titlelen|30"; FillAttsDefault($ctag->CAttributeItems, $attlist); extract($ctag->CAttributeItems, EXTR_SKIP); $innertext = trim($ctag->GetInnerText()); $revalue = ''; $query = "SELECT * FROM `#@__product_case` ORDER BY id DESC LIMIT 0, $row"; $dsql->SetQuery($query); $dsql->Execute(); while($row = $dsql->GetArray()) { $row['description'] = cn_substr($row['description'], $titlelen); $row['addtime'] = date('Y-m-d', $row['addtime']); $revalue .= str_replace(array('~id~', '~title~', '~description~', '~litpic~', '~addtime~'), array($row['id'], $row['title'], $row['description'], $row['litpic'], $row['addtime']), $innertext); } return $revalue; } ?> -
注册标签到系统 打开
include/helpers/extendhelper.inc.php文件,在文件末尾添加注册代码。// 注册产品案例标签 $GLOBALS['cfg_custom_tag_func']['product_case'] = 'lib_product_case';
-
在前台模板中使用标签 现在你可以在任何模板文件中使用这个自定义标签了。
{dede:product_case row='6'} <div class="col-md-4"> <div class="thumbnail"> <img src="~litpic~" alt="~title~"> <div class="caption"> <h3>~title~</h3> <p>~description~</p> <p><a href="/case-detail.php?id=~id~" class="btn btn-primary" role="button">查看详情</a></p> </div> </div> </div> {/dede:product_case}
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 使用系统自带模块 | 需求简单,如单页、留言簿等 | 快速、简单,无需开发 | 功能有限,灵活性差 |
| 开发自定义模块 | 需求复杂,有特定数据结构和功能 | 功能强大,高度灵活,可扩展 | 开发周期长,需要PHP和MySQL知识 |
对于大多数用户来说,熟练运用系统自带的模块和标签已经能满足80%的需求,当遇到无法解决的特殊需求时,再考虑进行二次开发。
希望这份详细的指南能帮助你理解在织梦模板中增加模块的各种方法!
