哥斯拉 发表于 2023-12-22 14:47:02

如何给帖子增加属性 New

比如进度、状态、跟进人等等属性,后续还可以持续更新,请问可以这么做吗
我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-20 06:43:08

在Discuz!中,给帖子增加自定义属性(如进度、状态、跟进人等)是可以通过开发自定义插件或修改现有代码来实现的。以下是实现这一功能的步骤:

### 1. **数据库表扩展**
首先,你需要在数据库中为帖子表(`pre_forum_post` 或 `pre_forum_thread`)增加新的字段来存储这些自定义属性。例如:

ALTER TABLE pre_forum_thread ADD COLUMN progress VARCHAR(255) DEFAULT NULL;
ALTER TABLE pre_forum_thread ADD COLUMN status VARCHAR(255) DEFAULT NULL;
ALTER TABLE pre_forum_thread ADD COLUMN follower VARCHAR(255) DEFAULT NULL;

### 2. **修改发帖和编辑帖子页面**
在发帖和编辑帖子的页面中,你需要增加表单字段来输入这些自定义属性。通常这些页面位于 `template/default/forum/post_editor.htm` 或 `template/default/forum/post.htm` 文件中。

你可以在表单中添加如下代码:

<dl>
    <dt>进度</dt>
    <dd><input type="text" name="progress" value="{$thread['progress']}" /></dd>
</dl>
<dl>
    <dt>状态</dt>
    <dd><input type="text" name="status" value="{$thread['status']}" /></dd>
</dl>
<dl>
    <dt>跟进人</dt>
    <dd><input type="text" name="follower" value="{$thread['follower']}" /></dd>
</dl>

### 3. **处理表单提交**
在 `source/module/forum/forum_post.php` 文件中,找到处理帖子提交的逻辑部分,通常是 `submitpost` 函数。在这里,你需要获取表单提交的数据并保存到数据库中。

$progress = $_GET['progress'];
$status = $_GET['status'];
$follower = $_GET['follower'];

C::t('forum_thread')->update($tid, array(
    'progress' => $progress,
    'status' => $status,
    'follower' => $follower,
));

### 4. **显示自定义属性**
在帖子详情页面(通常是 `template/default/forum/viewthread.htm` 文件)中,你需要显示这些自定义属性。

<dl>
    <dt>进度</dt>
    <dd>{$thread['progress']}</dd>
</dl>
<dl>
    <dt>状态</dt>
    <dd>{$thread['status']}</dd>
</dl>
<dl>
    <dt>跟进人</dt>
    <dd>{$thread['follower']}</dd>
</dl>

### 5. **持续更新**
如果你希望这些属性可以持续更新,可以在帖子详情页面增加一个编辑按钮,点击后跳转到编辑页面,允许用户更新这些属性。

### 6. **插件化**
如果你希望这些功能更加灵活,并且不影响Discuz!的升级,建议将这些功能封装成一个插件。你可以参考Discuz!的插件开发手册来创建一个插件,插件可以通过钩子(hook)机制来扩展Discuz!的功能。

### 7. **权限控制**
如果你希望只有特定用户组(如管理员、版主)可以编辑这些属性,可以在表单提交和显示逻辑中加入权限判断。

if(!$_G['group']['alloweditpost']) {
    showmessage('您没有权限编辑此帖子的属性。');
}

### 8. **缓存处理**
如果你使用了Discuz!的缓存机制,记得在更新这些属性时清除相关缓存,以确保数据的一致性。

### 9. **测试**
在完成上述步骤后,务必进行充分的测试,确保功能正常且不会影响其他功能。

### 10. **备份**
在进行任何代码修改之前,请务必备份你的数据库和文件,以防止出现不可预见的错误。

通过以上步骤,你可以为Discuz!的帖子增加自定义属性,并且可以持续更新这些属性。如果你对Discuz!的二次开发不熟悉,建议参考Discuz!的开发手册或寻求专业开发者的帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-20 15:51:11

在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智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-20 15:55:05

在Discuz!中,给帖子增加自定义属性(如进度、状态、跟进人等)是可以通过插件或自定义开发来实现的。以下是实现这一功能的几种方法:

### 1. 使用自定义字段(推荐)
Discuz! 支持通过插件或模板修改来添加自定义字段。你可以通过以下步骤来实现:

#### 步骤1:创建自定义字段
你可以通过插件或直接在数据库中创建自定义字段。通常,这些字段会存储在 `pre_forum_thread` 表中。

#### 步骤2:修改发帖模板
在发帖页面(`post.php` 或 `forumdisplay.php`)中,添加表单字段来输入这些自定义属性。例如:

<input type="text" name="progress" placeholder="进度">
<input type="text" name="status" placeholder="状态">
<input type="text" name="follower" placeholder="跟进人">

#### 步骤3:保存自定义字段
在发帖或编辑帖子时,将这些字段的值保存到数据库中。你可以在 `source/module/forum/forum_post.php` 或 `source/module/forum/forum_editpost.php` 中添加相应的代码来处理这些字段的保存。

$progress = $_POST['progress'];
$status = $_POST['status'];
$follower = $_POST['follower'];

// 保存到数据库
C::t('forum_thread')->update($tid, array('progress' => $progress, 'status' => $status, 'follower' => $follower));

#### 步骤4:显示自定义字段
在帖子详情页(`viewthread.php`)中,从数据库中读取这些字段并显示出来。

$thread = C::t('forum_thread')->fetch($tid);
$progress = $thread['progress'];
$status = $thread['status'];
$follower = $thread['follower'];

// 在模板中显示
echo "进度: $progress<br>";
echo "状态: $status<br>";
echo "跟进人: $follower<br>";

### 2. 使用插件
如果你不想手动修改代码,可以通过安装或开发插件来实现。你可以在DZ插件网(https://www.dz-x.net/)上寻找相关插件,或者自己开发一个插件。

#### 插件开发步骤:
1. **创建插件**:在 `source/plugin/` 目录下创建一个新的插件目录。
2. **定义插件信息**:在插件目录下创建 `plugin.xml` 文件,定义插件的基本信息。
3. **添加自定义字段**:在插件的 `install.php` 中创建自定义字段。
4. **处理表单提交**:在插件的 `post.php` 或 `editpost.php` 中处理表单提交并保存数据。
5. **显示字段**:在插件的 `viewthread.php` 中读取并显示自定义字段。

### 3. 使用扩展表
如果自定义字段较多或需要更复杂的管理,可以考虑使用扩展表来存储这些字段。扩展表可以通过插件或直接在数据库中创建。

#### 步骤1:创建扩展表
在数据库中创建一个新的表来存储这些自定义字段。

CREATE TABLE pre_forum_thread_ext (
    tid mediumint(8) unsigned NOT NULL,
    progress varchar(255) NOT NULL,
    status varchar(255) NOT NULL,
    follower varchar(255) NOT NULL,
    PRIMARY KEY (tid)
);

#### 步骤2:修改代码
在发帖、编辑和显示帖子时,操作这个扩展表来存储和读取数据。

### 总结
通过以上方法,你可以为Discuz!帖子增加自定义属性,如进度、状态、跟进人等。你可以选择手动修改代码、使用插件或创建扩展表来实现这一功能。如果你不熟悉代码修改,建议使用插件来实现,这样可以更方便地管理和维护这些自定义属性。

如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 如何给帖子增加属性 New