第一步:核心思路与功能规划
我们要明确百度百科的核心功能,并将其拆解成织梦DedeCMS可以实现的功能模块。

(图片来源网络,侵删)
-
词条核心 (文章模型):
- 每个词条就是一篇独立的文章。
- 文章需要有标题、内容(支持富文本编辑器)、分类(如“科学”、“历史”、“地理”)。
- 关键特性:
- URL:
index.php?/view-xxx.html(xxx为词条ID) - 在列表页显示词条简介。
- 分类: 用于导航和筛选。
- URL:
-
分类导航 (栏目管理):
- 使用DedeCMS的顶级栏目来模拟百科的大分类,如“自然科学”、“社会科学”、“工程技术”等。
- 在每个顶级栏目下,可以建立子栏目来模拟更细的分类,如“自然科学”下可以有“物理学”、“化学”、“生物学”。
-
词条创建与编辑 (会员与投稿):
- 词条创建: 开放给所有注册会员,通过会员中心的“发布内容”功能,选择“词条”模型进行创建。
- 词条编辑: 词条的创建者可以编辑自己的词条,管理员可以编辑所有词条。
- 审核机制: 所有新创建或修改的词条,都需要经过后台审核才能显示,这是保证内容质量的关键。
-
词条关系 (自定义模型/表单):
(图片来源网络,侵删)- 这是“仿百科”的精髓之一,词条之间可以有关联,词条A”提到“词条B”,用户点击“词条B”就能跳转过去。
- 实现方式:为“词条”文章模型增加一个自定义字段,
related_terms,用于存储关联词条的ID,用逗号隔开,前端通过JS解析这个字段,生成可点击的链接。
-
词条版本历史 (自定义表单):
- 每次编辑词条时,都应该记录下编辑者、编辑时间、编辑摘要,形成一个历史版本列表。
- 实现方式:创建一个自定义表单,命名为
词条版本,当会员编辑词条并提交后,通过一个触发器(需要修改或写个小程序)将编辑信息(编辑人、时间、旧内容快照)提交到这个表单中,在词条详情页调用这个表单的数据来展示历史版本。
-
词条评价/纠错 (自定义表单):
- 用户可以对词条内容进行评价或指出错误。
- 实现方式:创建一个自定义表单,命名为
词条评价,在词条详情页放置一个表单提交入口,用户提交后,管理员在后台审核并显示。
第二步:详细实施步骤
创建核心内容模型 - “词条”
这是整个项目的基础。
- 路径: 核心 -> 内容模型管理 -> 添加新模型
- 模型名称: 词条
- 模型表前缀:
dede_archives(默认即可,通常不修改) - 附加表:
dede_addonarticle(默认即可,这是文章模型的默认附加表) - 选择字段: 勾选你需要的系统字段,如
title(标题),typeid(栏目),writer(作者),litpic(缩略图/词条封面图),description(词条简介),body(正文/词条内容)。 - 保存模型。
创建分类栏目
- 路径: 核心 -> 栏目管理
- 添加顶级栏目:
- 栏目名称: 自然科学
- 栏目类型: 普通栏目
- 内容模型: 选择 “词条”
- 列表模板:
list_article.htm(使用默认的,后续可以自定义) - 保存。
- 为顶级栏目添加子栏目:
- 点击“自然科学”的“[增加子栏目]”。
- 栏目名称: 物理学
- 栏目类型: 普通栏目
- 内容模型: 选择 “词条”
- 保存。
- 重复此操作,创建“化学”、“生物学”等子栏目。
添加关键的自定义字段
这是实现“百科”特色功能的关键。

(图片来源网络,侵删)
- 路径: 核心 -> 内容模型管理 -> 选择“词条”模型 -> [管理字段]
- 添加关联词条字段:
- 字段名称:
related_terms(英文名,必须唯一) - 关联词条
- 字段类型: 多选文本框 (或者单行文本,看你希望如何输入)
- 字段说明: 输入与此词条相关的其他词条的ID,用英文逗号隔开。
123, 456, 789 - 是否显示在发布页: 是 (让编辑者可以填写)
- 是否显示在列表页: 否 (不需要在列表页显示)
- 保存。
- 字段名称:
- 添加版本摘要字段 (用于编辑时填写修改说明):
- 字段名称:
edit_summary - 版本摘要
- 字段类型: 单行文本框
- 是否显示在发布页: 是 (在编辑表单中显示)
- 保存。
- 字段名称:
创建自定义表单 (用于版本历史和评价)
- 路径: 核心 -> 自定义表单管理 -> [增加一个自定义表单]
- 创建“词条版本”表单:
- 表单名称: 词条版本
- 数据表:
dede_addonexample(默认) - 进入字段管理,添加以下字段:
term_id(int, 11): 词条ID (主键)editor(varchar, 50): 编辑者edit_time(datetime): 编辑时间summary(varchar, 255): 版本摘要content_snapshot(text): 内容快照 (可选,存储修改前的内容)
- 创建“词条评价”表单:
- 表单名称: 词条评价
- 数据表:
dede_addonexample(或新建一个) - 进入字段管理,添加以下字段:
term_id(int, 11): 词条ID (主键)user(varchar, 50): 评价人comment(text): 评价内容status(varchar, 10): 状态 (用于后台审核,如'待审核', '已通过')
设置会员与投稿
- 开启会员功能:
- 路径: 系统 -> 系统基本参数 -> 会员设置
- 勾选“启用会员功能”,并设置相关参数。
- 会员投稿权限:
- 路径: 核心 -> 频道管理 -> 内容模型管理 -> 选择“词条”模型 -> [投稿设置]
- 勾选“允许会员投稿”,并设置投稿后的默认状态为“待审核”。
- 会员组权限:
- 路径: 核心 -> 会员管理 -> 会员组管理
- 为普通会员组设置“投稿”权限,并限制其只能在自己投稿的“词条”中进行编辑。
第三步:模板制作与调用
词条列表页模板 (list_article.htm)
这个模板用来显示一个分类下的所有词条。
{dede:list pagesize='20'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
<span class="category">分类: [field:typename/]</span>
</li>
{/dede:list}
{dede:pagelist listitem='info,index,end,pre,next,pageno' listsize='5'/}
词条详情页模板 (article_article.htm)
这是最核心的模板,需要整合所有功能。
<!DOCTYPE html>
<html>
<head>{dede:field.title/} - 我的百科</title>
<meta name="description" content="{dede:field.description/}" />
</head>
<body>
<h1>{dede:field.title/}</h1>
<!-- 词条封面图 -->
{dede:field name='litpic'/}
<!-- 词条内容 -->
<div class="content">
{dede:field.body/}
</div>
<!-- 关联词条 -->
<div class="related-terms">
<h3>相关词条</h3>
<ul>
{dede:field name='related_terms' runphp='yes'}
$rel_ids = @explode(',', trim(@me));
if(!empty($rel_ids)){
$rel_ids = array_filter($rel_ids); // 过滤空值
$dsql = new DedeSql(false);
$orwhere = "";
foreach($rel_ids as $id){
$orwhere .= " OR id='$id' ";
}
$dsql->SetQuery("SELECT id, title FROM dede_archives WHERE ($orwhere) AND arcrank > -1");
$dsql->Execute('me');
$result = '';
while($row = $dsql->GetArray('me')){
$result .= "<li><a href='/view-{$row['id']}.html'>{$row['title']}</a></li>";
}
@me = $result;
}else{
@me = "<li>暂无相关词条</li>";
}
{/dede:field}
</ul>
</div>
<!-- 词条版本历史 -->
<div class="version-history">
<h3>版本历史</h3>
<dl>
{dede:php}
$term_id = $arcID;
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT editor, edit_time, summary FROM dede_addonexample WHERE aid = '$term_id' ORDER BY edit_time DESC");
$dsql->Execute('v');
while($row = $dsql->GetArray('v')){
echo "<dt>{$row['edit_time']} by {$row['editor']}</dt>";
echo "<dd>{$row['summary']}</dd>";
}
{/dede:php}
</dl>
</div>
<!-- 词条评价/纠错表单 -->
<div class="feedback-form">
<h3>纠错与评价</h3>
<form action="/plus/diy.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="action" value="post" />
<input type="hidden" name="diyid" value="2" /> <!-- 这里填你的“词条评价”表单ID -->
<input type="hidden" name="do" value="2" />
<input type="hidden" name="dede_fields" value='term_id,text;user,text;comment,text' />
<input type="hidden" name="dede_fieldshash" value='这里需要根据你的表单字段生成hash值' />
<input type="hidden" name="term_id" value="{dede:field.id/}" />
<p><label>您的称呼:</label><input type="text" name="user" /></p>
<p><label>评价内容:</label><textarea name="comment" rows="5" cols="50"></textarea></p>
<p><input type="submit" name="submit" value="提交" /></p>
</form>
</div>
</body>
</html>
注意:
- 关联词条的调用使用了
runphp='yes',在PHP代码中直接查询数据库生成链接。 - 版本历史的调用使用了
{dede:php}标签,直接嵌入PHP代码查询dede_addonexample(你的版本表)。 - 评价表单使用了DedeCMS的自定义表单提交功能,你需要将
diyid替换为你创建的“词条评价”表单的实际ID,并根据你的表单字段正确填写dede_fields和dede_fieldshash,这个hash值可以通过查看一个已存在的表单页面源代码来找到。
第四步:URL优化与伪静态
为了URL更美观,需要设置伪静态规则。
- 织梦后台设置:
- 路径: 系统 -> 系统基本参数 -> 核心设置
- 是否使用伪静态: 选择“是”
- URL静态化: 选择“是”
- 服务器配置:
- Apache: 在网站根目录下创建
.htaccess文件,写入以下规则:RewriteEngine On RewriteRule ^list-([0-9]+)\.html$ /plus/list.php?tid=$1 RewriteRule ^view-([0-9]+)\.html$ /plus/view.php?aid=$1
- Nginx: 在nginx的server配置块中添加:
rewrite "^/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last; rewrite "^/view-([0-9]+)\.html$" /plus/view.php?aid=$1 last;
- Apache: 在网站根目录下创建
第五步:可选高级功能
- 词条锁定: 管理员可以在后台对成熟、重要的词条进行“锁定”,禁止普通会员编辑,只有管理员可以修改。
- 重定向词条: 当一个词条有多个名称时(如“电脑”和“计算机”),可以将其中一个重定向到另一个,可以通过在数据库中添加一个重定向字段,或者用JS实现前端跳转。
- 词条浏览次数: 使用DedeCMS的
click字段,在文章详情页模板中调用{dede:field.click/}显示,并使用JS在页面加载时进行一次/plus/count.php?view=yes&aid=[field:id/]的请求来增加计数。 - 词条等级: 根据词条内容的丰富程度、浏览量、编辑次数等,给词条设置一个等级(如“初级词条”、“优秀词条”、“精华词条”),这需要更复杂的逻辑和字段。
仿做织梦DedeCMS百科站点的核心在于:
- 模型”:将“词条”作为核心模型。
- 用好“自定义字段”:实现词条的特色属性,如关联词条。
- 用好“自定义表单”:实现词条的交互功能,如版本历史、用户评价。
- 用好“PHP标签”:在模板中嵌入PHP代码,实现复杂的数据库查询和逻辑处理。
- 用好“会员系统”:实现UGC(用户生成内容)的投稿和编辑流程。
这个方案为你提供了一个完整的框架,你可以根据实际需求进行细节的调整和功能的扩展,祝你项目顺利!
