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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

x2论坛推广任务分析

[复制链接]
evenzhou 发表于 2011-7-31 20:52:48 | 显示全部楼层 |阅读模式
本帖最后由 evenzhou 于 2011-7-31 20:53 编辑


下面以推广任务为例进行分析
首先,在后台安装任务,如果出现安装失败(提示“指定的任务脚本已安装”)。进入数据库找到表pre_common_task,将该任务对应的记录删除
打开home_task.php,

  1. if(empty($do)) {

  2.         $_G['gp_item'] = empty($_G['gp_item']) ? 'new' : $_G['gp_item'];
  3.         $actives = array($_G['gp_item'] => ' class="a"');
  4.         $tasklist = $tasklib->tasklist($_G['gp_item']);
  5.         $listdata = $tasklib->listdata;
  6.         if($_G['gp_item'] == 'doing' && empty($tasklist)) {
  7.                 dsetcookie('taskdoing_'.$_G['uid']);
  8.         }

  9. }
复制代码
当传入的do值为空时,程序将根据item动作调取数据,item可以分别:new、doing、done、failed、canapply
首先进行任务申请,申请任务有5种状态:需要执行相关任务、用户组受限制、重复申请、任务过期、申请成功。如果任务申请成功,处理方式:打开class_task.php
  1. } elseif($this->task['period']) {
  2.                         $mytask = DB::fetch_first("SELECT mt.*, t.period, t.periodtype FROM ".DB::table('common_mytask')." mt
  3.                                 INNER JOIN ".DB::table('common_task')." t USING(taskid)
  4.                                 WHERE mt.uid='$_G[uid]' AND mt.taskid='$id' ORDER BY mt.dateline DESC");
  5.                         list($allowapply) = $this->checknextperiod($mytask);
  6.                         if($allowapply < 0) {
  7.                                 return -4;
  8.                         }
  9.                 }

  10.                 require_once libfile('task/'.$this->task['scriptname'], 'class');
  11.                 $taskclassname = 'task_'.$this->task['scriptname'];
  12.                 $taskclass = new $taskclassname;
  13.                 if(method_exists($taskclass, 'condition')) {
  14.                         $taskclass->condition();
  15.                 }
  16.                 DB::query("REPLACE INTO ".DB::table('common_mytask')." (uid, username, taskid, csc, dateline)
  17.                         VALUES ('$_G[uid]', '$_G[username]', '".$this->task['taskid']."', '0\t$_G[timestamp]', '$_G[timestamp]')");
  18.                 DB::query("UPDATE ".DB::table('common_task')." SET applicants=applicants+1 WHERE taskid='".$this->task['taskid']."'", 'UNBUFFERED');
  19.                 if(method_exists($taskclass, 'preprocess')) {
  20.                         $taskclass->preprocess($this->task);
  21.                 }
  22.                 return true;
  23.         }
复制代码
其中$taskclass->preprocess($this->task)这行代码是初始化任务推广数。 推广任务的处理代码如下:

  1. function preprocess($task) {
  2.                 global $_G;

  3.                 $promotions = DB::result_first("SELECT COUNT(*) FROM ".DB::table('forum_promotion')." WHERE uid='$_G[uid]'");
  4.                 DB::query("REPLACE INTO ".DB::table('forum_spacecache')." (uid, variable, value, expiration) VALUES ('$_G[uid]', 'promotion$task[taskid]', '$promotions', '$_G[timestamp]')");
  5.         }
复制代码
推广数有计划务,会每日定期清理掉。如果用户在一天之内没有完成推广任务,那么上次的推广数是会被清理掉,重新计数
下面介绍推广的处理方法:当用户访问网站的时候会首先调用class_core.php文件,我们来看看推广处理代码:
  1. if((!empty($this->var['gp_fromuid']) || !empty($this->var['gp_fromuser'])) && ($this->var['setting']['creditspolicy']['promotion_visit'] || $this->var['setting']['creditspolicy']['promotion_register'])) {
  2.                         require_once libfile('misc/promotion', 'include');
  3.                 }
复制代码
推广分为:推广访问和注册推广,管理员需要设置推广访问和注册推广奖励才会给予推广计数。这也是为什么很多站长说推广任务为什么完成不了的原因




64243354 发表于 2011-7-31 22:47:01 | 显示全部楼层
{:soso__15717774520955482145_4:}偷偷地來学習了
回复

使用道具 举报

0320850 发表于 2011-7-31 23:51:10 | 显示全部楼层
首页留位,学习了
回复

使用道具 举报

clqc58 发表于 2011-8-1 21:53:35 | 显示全部楼层
学习中进步
回复

使用道具 举报

当时明月 发表于 2011-8-2 08:48:10 | 显示全部楼层
顶一下慢慢学,推广一直是我的弱项。
回复

使用道具 举报

mxl1983413 发表于 2011-8-2 11:40:52 | 显示全部楼层
涉及到代码的,感觉好麻烦,这是2.0的BUG吗?
回复

使用道具 举报

 楼主| evenzhou 发表于 2011-8-2 13:33:01 | 显示全部楼层
mxl1983413 发表于 2011-8-2 11:40
涉及到代码的,感觉好麻烦,这是2.0的BUG吗?

什么麻烦呢? 哪里有问题呢?
回复

使用道具 举报

mxl1983413 发表于 2011-8-2 14:05:49 | 显示全部楼层
evenzhou 发表于 2011-8-2 13:33
什么麻烦呢? 哪里有问题呢?

我指的“麻烦”,是看不懂代码,虽然混了Discuz!好多年,可是我最害怕修改代码之类的工作。
回复

使用道具 举报

 楼主| evenzhou 发表于 2011-8-2 14:07:03 | 显示全部楼层
mxl1983413 发表于 2011-8-2 14:05
我指的“麻烦”,是看不懂代码,虽然混了Discuz!好多年,可是我最害怕修改代码之类的工作。

这文章只是说了推广的过程,和容易出错的地方
不需要更改代码的
回复

使用道具 举报

mxl1983413 发表于 2011-8-2 14:11:54 | 显示全部楼层
evenzhou 发表于 2011-8-2 14:07
这文章只是说了推广的过程,和容易出错的地方
不需要更改代码的

谢谢,明白了。
这些文章对于正在学习PHP技术的人,帮助是极大的,期待官方多发布这种文章。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:32 , Processed in 0.116990 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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