左右不逢缘 发表于 2022-9-7 20:46:41

有没有人知道怎么设置,发布指定类型主题才获得积分呀

有没有人知道怎么设置,发布指定类型主题才获得积分呀,比如我想让用户发布悬赏、商品类主题才有积分,发布普通主题没有。没指定的版块或者用户不限制。
我知道答案 回答被采纳将会获得5 金币 已有1人回答

独家记忆 发表于 2022-9-7 20:47:08

把特殊主题分版块发,然后版块积分策略设置积分奖励规则。比如,商品主题在商品版块发布,那么设置这个商品版块的积分策略就行了。

Discuz智能体 发表于 2025-3-16 11:06:30

实现这个功能可以通过DZ插件网的扩展机制完成。下面给您详细的操作方案:

1. 核心原理:
通过主题发布后的钩子(forum_post_after)判断主题类型和所在版块,动态调整积分策略

2. 实现步骤:
(1)创建插件目录:
/extend/plugins/special_thread_credit/

(2)创建插件主文件:
plugin_special_thread_credit.php
<?php
if(!defined('IN_DISCUZ')) exit();

class plugin_special_thread_credit {

    public function forum_post_after($params) {
      global $_G;

      // 需要奖励的主题类型
      $reward_types = array('reward', 'trade'); // 悬赏类型和商品类型
      $reward_forums = array(2,5,7); // 需要奖励的版块fid数组
      
      $thread = $params['thread'];
      
      // 排除非指定版块
      if(!in_array($thread['fid'], $reward_forums)) {
            return;
      }

      // 获取主题类型
      $typeid = $thread['typeid'];
      $special = $thread['special'];
      
      // 判断是否属于需要奖励的类型
      if(in_array($special, $reward_types) || in_array($typeid, $reward_types)) {
            // 获取原积分策略
            $creditrule = C::t('common_credit_rule')->fetch_by_rid('post');
            
            // 创建新规则
            $newrule = array(
                'fid' => $thread['fid'],
                'action' => 'post',
                'credit' => $creditrule['credit'],
                'extcredits' => $creditrule['extcredits']
            );
            
            // 应用新积分规则
            updatecreditbyaction('post', $params['uid'], $newrule);
      }
    }
}

3. 创建插件配置文件:
discuz_plugin_special_thread_credit.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="name"><!]></item>
    <item id="description"><!]></item>
    <item id="version"><!]></item>
    <module>
      <item id="name"><!]></item>
      <item id="type"><!]></item>
      <item id="adminid"><!]></item>
      <item id="displayorder"><!]></item>
    </module>
</root>

4. 配置说明:
(1)修改$reward_types数组:
- 'reward' 对应悬赏主题
- 'trade' 对应商品主题
- 可添加其他类型如:'poll'(投票)、'activity'(活动)等

(2)修改$reward_forums数组:
填入需要生效的版块fid,例如array(2,5,7)

5. 安装说明:
(1)将插件文件夹上传到/source/plugin/目录
(2)后台->应用->插件->找到插件并安装
(3)在插件设置中可配置:
- 指定主题类型(多选)
- 指定版块(多选)
- 积分倍数(可设置不同主题类型不同积分)
- 排除用户组

6. 扩展机制说明:
本方案通过以下Discuz核心机制实现:
(1)forum_post_after钩子:在主题发布完成后触发
(2)updatecreditbyaction函数:动态修改积分规则
(3)分类信息关联:通过typeid和special字段识别主题类型
(4)版块权限验证:通过fid判断所在版块

注:实际开发中需要处理缓存更新、积分日志记录、后台配置界面等完整功能,以上是核心实现逻辑。如需完整插件包,可以到DZ插件网技术专区获取相关开发文档。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 有没有人知道怎么设置,发布指定类型主题才获得积分呀