织梦自定义模型前台投稿开发
业务场景
会员中心默认只支持普通文章投稿。如果想让会员在前台投稿自定义模型内容(如提交课程、房产、招聘信息),需要扩展会员投稿模板和后台处理逻辑。常见场景包括:用户自主发布二手商品、教师上传课程、企业发布招聘等。
前台投稿开发涉及三块:投稿表单模板、投稿处理程序、审核机制。下面以“课程信息”模型为例完整演示。
第一步:开启模型投稿权限
1. 后台 → 核心 → 频道模型 → 内容模型管理 → 编辑“课程信息”。
2. 在“会员投稿权限”中勾选允许投稿的会员组(如“注册会员”)。
3. 在 系统 → 系统基本参数 → 会员设置 中确认“是否开启会员投稿”为“是”。
第二步:制作投稿表单模板
投稿表单模板位于 /member/templets/,参考系统自带的 article_add.htm 复制一份为 course_add.htm。
表单核心代码
<form name="addcontent" action="course_add.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="channelid" value="-8">
<input type="hidden" name="dopost" value="save">
<label>课程标题:</label>
<input type="text" name="title" required>
<label>授课老师:</label>
<input type="text" name="course_teacher">
<label>课程价格:</label>
<input type="number" name="course_price" min="0">
<label>难度等级:</label>
<select name="course_level">
<option value="1">初级</option>
<option value="2">中级</option>
<option value="3">高级</option>
</select>
<label>课程大纲:</label>
<textarea name="course_outline" rows="5"></textarea>
<label>封面图:</label>
<input type="file" name="course_cover">
<button type="submit">提交投稿</button>
</form>
第三步:编写投稿处理程序
在 /member/ 目录下新建 course_add.php,参考 article_add.php 改造:
require_once(dirname(__FILE__)."/config.php");
require_once(DEDEINC."/image.func.php");
require_once(DEDEINC."/oxwindow.class.php");
if($dopost=='save') {
// 1. 基础校验
if(empty($title)) ShowMsg('标题不能为空', '-1');
if($cfg_ml->M_ID <=0) ShowMsg('请先登录', '../login.php');
// 2. 写入主表 archives
$arcID=InsertArchives(array(
'title'=> $title,
'typeid'=> $typeid,
'channel'=> -8,
'mid'=> $cfg_ml->M_ID,
'arcrank'=> -1, // 待审核
));
// 3. 写入附加表 addoncourse
$inQuery="INSERT INTO `dede_addoncourse`
(aid, typeid, course_teacher, course_price, course_level, course_outline)
VALUES ('$arcID', '$typeid',
'$course_teacher', '$course_price',
'$course_level', '$course_outline')";
$dsql->ExecuteNoneQuery($inQuery);
// 4. 处理封面上传
if($_FILES['course_cover']['name']) {
$upload=UploadOneImage('course_cover', $_FILES['course_cover']);
$dsql->ExecuteNoneQuery("UPDATE `dede_archives` SET litpic='$upload' WHERE id='$arcID'");
}
ShowMsg('投稿成功,等待审核', 'content_list.php');
exit();
}
第四步:投稿列表与编辑
会员中心需提供“我发布的课程”列表与编辑入口。复制 content_list.php 改为 course_list.php,查询条件加 channel=-8:
$sql="SELECT * FROM `dede_archives`
WHERE mid='{$cfg_ml->M_ID}' AND channel=-8
ORDER BY id DESC";
编辑页 course_edit.php 类似,先读出附加表字段回填表单,保存时同步更新主表与附加表。
第五步:审核机制
投稿默认 arcrank=-1(待审核),后台管理员进入 核心 → 审核文档 即可看到列表。审核通过后改为 0 才会生成静态页并对外显示。
也可开发“投稿自动审核”模块:根据会员等级、信用分自动放行,但需配套反垃圾机制(关键词过滤、IP 限制、验证码)。
注意事项
$_POST 数据入库前必须用 htmlspecialchars 或织梦自带的 GetApiKey 处理,防止 XSS。后续优化方向
建议为投稿系统接入“草稿箱”功能,会员可暂存未完成的内容;增加“投稿统计”面板,让会员看到审核通过率与浏览数据。同时结合反垃圾策略(同 IP 限频、敏感词过滤、验证码),降低人工审核成本。对于高价值投稿(如优质课程),可开发积分奖励机制,提升会员投稿积极性,形成内容生态正向循环。