Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz!7.0 论坛任务开发文档

[复制链接]
liuqiang 发表于 2009-4-1 18:32:36 | 显示全部楼层 |阅读模式
本帖最后由 liuqiang 于 2009-4-3 14:33 编辑

Discuz! 任务系统预留了安装、升级、卸载等多个接口,便于插件作者设计新的任务类型。


一、任务设计流程:

    o 熟练使用 Discuz! 论坛系统后,对希望完善或补充的个性化功能进行评估,进而提出任务的功能需求。
   
    o 对任务做一个概括性的设计,例如:完成任务的条件,需要使用什么参数,配置哪些选项、数据结构如何设计等等。
   
    o 编写相应程序代码,实现所需的功能并进行代码测试、兼容性测试和代码改进。
   
    o 编写任务说明书,其中包括:任务适用的 Discuz! 版本、功能概述、兼容性声明、安装方法、使用方法、卸载方法等等。
   
    o 将任务提供给他人,或自己使用,根据使用者反馈,对任务进行完善。

二、任务脚本命名规范:

    o 主程序文件 *.inc.php 置于 include/tasks/ 目录下。
   
    o 配置文件 *.cfg.php 置于 include/tasks/ 目录下。
   
    o 主程序文件和配置文件的文件名部分必须一致,比如:gift.inc.php 和 gift.cfg.php。

三、任务数据结构:

    任务表(cdb_tasks):

        taskid        任务的唯一 ID,自动递增
        relatedtaskid    依存任务ID:必须完成依存任务才能申请该任务
        available    是否启用
        name        任务名称 不超过 50 字节
        description    任务描述 支持 html
        icon        任务图标 必须是 images/tasks 目录下的文件 这里只需文件名即可 留空使用默认图标
        applicants    已申请任务人次
        achievers    已完成任务人次
        tasklimits    允许申请并完成该任务的人次上限
        applyperm    允许申请任务的用户组ID(使用\t隔开,如:    1    2    3)
        scriptname    任务脚本文件名(如:gift)
        starttime    任务上线时间(unix时间戳)
        endtime        任务下线时间(unix时间戳)
        period        任务周期 单位:小时 默认为0表示一次性任务 设置为24即1天表示日常任务
        reward        奖励类型, credit: 积分, magic: 道具, medal: 勋章, invite: 邀请码, group: 特殊用户组
        prize        奖品: 哪一个扩展积分, 道具ID, 勋章ID,邀请码有效期, 特殊用户组ID
        bonus        奖品数量/有效期: 积分数量, 道具数量, 勋章有效期, 邀请码数量,特殊用户组有效期
        displayorder    显示顺序

    任务变量表(cdb_taskvars):

        taskvarid    任务变量的唯一 ID,自动递增
        taskid        任务ID
        sort        变量类别(apply:用于申请任务的条件  complete:用于完成任务的条件  setting:用于任务设置)
        name        变量名称
        description    变量描述
        variable    变量名
        type        变量类型(数字:number 字串:text 文本:textarea 开关:radio 选择:select)
        value        变量值
        extra        变量附加值(当变量类型为 select 时,变量值可选的取值范围)

    我的任务表(cdb_mytasks):

        uid        会员 UID
        username    用户名
        taskid        任务 ID
        status        任务状态 -1失败 0进行中 1已完成
        csc        任务进度(浮点数,任务进度百分比,保留小数点后两位,并且去掉百分号,如:80.33)
        dateline    申请任务时间(unix时间戳)

四、任务配置文件注释:
  1.     //note 任务名称
  2.     $task_name = $tasklang['gift_name'];
  3.    
  4.     //note 任务描述
  5.     $task_description = $tasklang['gift_desc'];
  6.    
  7.     //note 任务图标,图标文件需上传到论坛 images/tasks 目录,这里填写图标文件名即可。留空则使用默认图标。图标尺寸最好是 64X64 。
  8.     $task_icon = 'gift.gif';
  9.    
  10.     //note 任务间隔周期,单位:小时,0 或留空表示一次性任务,大于 0 表示任务可重复申请。例如设置 24 ,则表示会员完成任务 24 小时之后可重复申请该任务。
  11.     $task_period = '';
  12.    
  13.     /**
  14.     * 申请/完成任务所需条件
  15.     * sort : 条件类别(apply:用于申请任务的条件  complete:用于完成任务的条件  setting:用于任务设置)
  16.     * name : 条件名称
  17.     * description : 条件说明
  18.     * variable : 条件变量名
  19.     * value :变量初始值
  20.     * type : 变量类型
  21.     * extra : 附加值
  22.     */
  23.     $task_conditions = array(
  24.         array('sort' => '', 'name' => '', 'description' => '', 'variable' => '', 'value' => '', 'type' => '', 'extra' => ''),
  25.     );

  26.     /**
  27.     * 任务附加设置,主程序可以通过查询 taskvars 表使用这些设置
  28.     * name : 条件名称
  29.     * description : 条件说明
  30.     * variable : 条件变量名
  31.     * value :变量初始值
  32.     * type : 变量类型
  33.     * extra : 附加值
  34.     */
  35.     $task_settings = array(
  36.         array('name' => '', 'description' => '', 'variable' => '', 'value' => '', 'type' => '', 'extra' => ''),
  37.     );

  38.     //note 任务脚本版本号
  39.     $task_version = '1.0';
  40.    
  41.     //note 任务脚本版权信息 支持 html
  42.     $task_copyright = $tasklang['gift_copyright'];
复制代码
五、任务配置文件说明:

    $task_name 是任务类型的名称,也是基于此任务类型创建新的任务时的默认任务名称。
    $task_description、$task_icon、$task_period、$task_period 这些属于任务属性的初始值。
    配置文件中的变量赋值建议使用语言包变量 $tasklang 并在 templates/default/tasks.lang.php 中设置这些语言变量。

六、任务主程序文件注释:
  1.     //note 禁止非法访问
  2.     if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4.     }

  5.     /**
  6.     * 任务安装处理
  7.     */
  8.     function task_install() {
  9.         global $db, $tablepre;
  10.     }
  11.    
  12.     /**
  13.     * 任务卸载处理
  14.     */
  15.     function task_uninstall() {
  16.         global $db, $tablepre;
  17.     }
  18.    
  19.     /**
  20.     * 任务升级处理
  21.     */
  22.     function task_upgrade() {
  23.         global $db, $tablepre;
  24.     }
  25.    
  26.     /**
  27.     * 申请任务的附加条件
  28.     */
  29.     function task_condition() {
  30.     }
  31.    
  32.     /**
  33.     * 申请任务成功后的附加处理
  34.     */
  35.     function task_preprocess() {
  36.     }
  37.    
  38.     /**
  39.     * 判断任务是否完成
  40.     * @param $task - 数组变量 任务相关属性
  41.     * @返回 TRUE:成功 FALSE:失败 0:任务进行中 进度未知或尚未开始  大于0的正数:任务进行中 返回任务进度
  42.     */
  43.     function task_csc($task = array()) {
  44.         return true;
  45.     }
  46.    
  47.     /**
  48.     * 完成任务后的附加处理
  49.     */
  50.     function task_sufprocess() {
  51.     }
复制代码
七、任务主程序文件说明:

    o $task 是个数组变量,其中包括 tasks 表所有字段和 mytasks 表的 csc、dateline 字段值,主程序文件可以通过参数或者声明为全局变量在各函数中使用。

    o 主程序文件内置 7 个函数,task_install()、task_uninstall()、task_upgrade()分别用于处理任务的安装、卸载和升级。
   
    o 论坛内置“用户组限制”、“必须完成指定任务”和“申请人次上限”这 3 个申请任务条件,开发者可以通过 task_condition() 函数来增加申请任务的附加条件,比如只允许没有上传过头像的会员申请:
        function task_condition() {
            global $discuz_uid;
        
            include_once DISCUZ_ROOT.'./uc_client/client.php';
            include language('tasks');
            if(uc_check_avatar($discuz_uid)) {
                showmessage($tasklang['avatar_apply_var_desc_noavatar']);
            }
        }
        
    o 任务安装、卸载和升级函数中可直接写 SQL 语句,然后使用 runquery() 函数执行,runquery() 函数在 admin/tasks.inc.php 程序中,SQL 语句中的表前缀请使用 cdb_ ,如果有建表语句,请使用 MySQL4.0 句法,runquery() 函数会自动处理字符集问题。
   
    o 有些任务需要在会员申请成功之后进行一些程序处理,我们预留了这个接口,开发者只需将处理过程置于 task_preprocess() 函数中即可,比如“加好友”这样的任务,必须在会员申请任务成功后记录一下该会员的好友数,这样才能知道会员申请任务后加了多少好友。

    o 同样的道理,任务完成后也可能需要进行一些程序处理,比如上面说的“加好友”任务,会员完成任务后可以将申请任务时记录的数据删除,处理过程需要置于 task_sufprocess() 这个函数中。
   
    o task_csc() 函数用于检测任务是否完成并返回任务进度。

评分

3

查看全部评分

abcnic 发表于 2009-4-1 21:27:59 | 显示全部楼层
沙发支持  :)
回复

使用道具 举报

zjnch 发表于 2009-4-2 11:35:17 | 显示全部楼层
支持下,谢谢楼主
回复

使用道具 举报

club123456 发表于 2009-4-2 13:26:10 | 显示全部楼层
支持了.
回复

使用道具 举报

wusepu 发表于 2009-4-2 19:43:26 | 显示全部楼层
任务发布网  免费发布http://www.taorenwu.com    淘任务
回复

使用道具 举报

茗缘居士 发表于 2009-4-3 00:34:21 | 显示全部楼层
有点懵,慢慢学习
回复

使用道具 举报

安全出口2 发表于 2009-4-3 14:24:16 | 显示全部楼层
回复

使用道具 举报

sonyscomcn 发表于 2009-4-5 17:30:02 | 显示全部楼层
支持

坐板凳
回复

使用道具 举报

开心马骝 发表于 2009-4-6 03:57:09 | 显示全部楼层
辛苦了支持一下
回复

使用道具 举报

pc77maikongjian 发表于 2009-4-7 18:30:28 | 显示全部楼层
有收到,谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-6-26 11:10 , Processed in 0.127207 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表