在Discuz! X系统中为帖子增加自定义属性(如进度、状态、跟进人),可通过以下两种技术方案实现:
=== 方案一:分类信息扩展法 ===
1. 进入后台 > 论坛 > 分类信息
2. 新建字段时使用以下参数:
- 字段类型:单选框/下拉菜单(适合状态)
- 字段变量名:status
- 选项内容:0=未开始|1=进行中|2=已完成
3. 在模板文件template/default/forum/viewthread_node.htm中插入:
- <!--{if $post['status']}-->
- <li>项目状态:{if $post['status'] == 1}进行中{elseif $post['status'] == 2}已完成{else}未开始{/if}</li>
- <!--{/if}-->
复制代码
=== 方案二:深度开发方案 ===
1. 数据库扩展:
- ALTER TABLE `pre_forum_post`
- ADD `progress` TINYINT NOT NULL DEFAULT '0',
- ADD `handler` VARCHAR(20) NOT NULL DEFAULT '',
- ADD `status` ENUM('pending','processing','completed') NOT NULL DEFAULT 'pending';
复制代码
2. 发帖页扩展(source/module/forum/forum_post.php):
- // 接收参数
- $progress = intval($_GET['progress']);
- $handler = dhtmlspecialchars($_GET['handler']);
- $status = in_array($_GET['status'], array('pending','processing','completed')) ? $_GET['status'] : 'pending';
- // 入库处理
- $_G['forum_post']->progress = $progress;
- $_G['forum_post']->handler = $handler;
- $_G['forum_post']->status = $status;
复制代码
3. 显示层改造(template/default/forum/post_editor.htm):
- <div class="mbm">
- <label>项目进度:</label>
- <input type="number" name="progress" min="0" max="100" value="{if !empty($progress)}{$progress}{/if}">%
- </div>
- <div class="mbm">
- <label>负责人:</label>
- <input type="text" name="handler" value="{if !empty($handler)}{$handler}{/if}">
- </div>
复制代码
=== 动态更新方案 ===
实现可更新属性功能需增加AJAX交互:
1. 创建接口文件(source/plugin/customfield/update.inc.php):
- <?php
- if(!defined('IN_DISCUZ')) exit('Access Denied');
- $pid = intval($_GET['pid']);
- $field = $_GET['field'];
- $value = $_GET['value'];
- C::t('forum_post')->update($pid, array($field => $value));
- echo json_encode(array('status' => 'success'));
复制代码
2. 前端交互脚本:
- function updateField(pid, field, value) {
- fetch('/plugin/customfield/update.inc.php?pid='+pid+'&field='+field+'&value='+value)
- .then(response => response.json())
- .then(data => {
- if(data.status === 'success') {
- show_success('更新成功');
- }
- });
- }
复制代码
=== 进阶建议 ===
1. 权限校验:在更新接口中需添加:
- if(!$_G['uid'] || $_G['adminid'] < 1) {
- exit(json_encode(array('error' => '权限不足')));
- }
复制代码
2. 历史记录功能建议使用pre_forum_postlog表存储变更记录:
- C::t('#customfield#forum_postlog')->insert(array(
- 'pid' => $pid,
- 'uid' => $_G['uid'],
- 'fieldname' => $field,
- 'oldvalue' => $oldvalue,
- 'newvalue' => $value,
- 'dateline' => TIMESTAMP
- ));
复制代码
以上方案可根据实际需求选择实现,如需快速部署,建议参考DZ插件网的技术文档获取更详细的字段扩展方案。实施前请做好数据备份,修改核心文件时建议使用插件机制进行扩展开发。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |