ag游戏客服|官方二次开发

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 1303|回复: 0
打印 上一主题 下一主题

ag游戏客服|官方dedecms会员中心“空间设置”功能源码分析教程

[复制链接]

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
跳转到指定楼层
楼主
发表于 2015-12-19 14:39:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
??在ag游戏客服|官方会员系统里面,有一个功能“空间设置”,如下图所示:



??这个功能跟论坛里面的设置我们个人空间类似,上面是我已经填写好的内容,点击“确定”我们进入到登录会员admin的空间看看,如下图所示:



??下面这二个就是我设置的空间标题和空间公告,上面是空间设置的使用,本教程将分析这个功能是如何实现的。

??处理这个功能的文件是:/member/edit_space_info.php,对应的模板文件是/member/templets/edit_space_info.htm

代码分析开始:

??1. 当我们点击“空间设置”执行的代码是条件if($dopost=='save')里面的else里面的代码。

??查询会员空间表#@__member_space:
  1. $row = $dsql->GetOne("SELECT * FROM `#@__member_space` WHERE mid='".$cfg_ml->M_ID."'");
复制代码


??如果这个会员的空间信息不存在,则插入一条默认的当前登录的会员信息:



??从数组$row中将变量导入到当前的符号表:??
  1. extract($row);
复制代码


??引入ag游戏客服|官方模板,显示当前登录用户的空间信息:
  1. include(dirname(__FILE__)."/templets/edit_space_info.htm");
复制代码


??退出程序:
  1. exit();
复制代码


??不知道大家发现没有,其实,上面的代码有问题,只有sql确没有执行的语句,那我们帮他加上就行了,找到sql语句:
  1. ??$inquery = "INSERT INTO `#@__member_space`(`mid` ,`pagesize` ,`matt` ,`spacename` ,`spacelogo` , `sign` ,`spacenews`)
  2. ? ?? ?? ?? ?Values('{$cfg_ml->M_ID}', '10', '0', '{$cfg_ml->M_UserName}的空间', '', '', ''); ";
复制代码



??在这行代码下面加上:
  1. $dsql->ExecuteNoneQuery($inquery);
复制代码


??2. 当填写好空间名称和空间公告后,点击“确定”,也就是执行if($dopost=='save')条件里面的代码。

??a) 初始化处理提交过来的数据:


??
??如果旧的logo路径不正确,则设置logo为空:
  1. ? ? if(!preg_match('#^'.$userdir."#", $oldspacelogo))
  2. ? ? {
  3. ? ?? ???$oldspacelogo = '';
  4. ? ? }
复制代码


??b) 上传logo处理,如果上传文件是通过http协议上传的,即条件if(is_uploaded_file($spacelogo))成立,处理下面的代码:



??如果上传的logo超出了我们配置的logo最大值,那么,退出程序:


??
??删除旧图片删除旧图片(防止文件扩展名不同,如:原来的是gif,后来的是jpg):

  1. ? ?? ???if(preg_match("#\.(jpg|gif|png)$#i", $oldspacelogo) && file_exists($cfg_basedir.$oldspacelogo))
  2. ? ?? ???{
  3. ? ?? ?? ?? ?@unlink($cfg_basedir.$oldspacelogo);
  4. ? ?? ???}
复制代码



??调用通用的上传函数上传logo:
  1. $spacelogo = MemberUploads('spacelogo','',$cfg_ml->M_ID,'image','mylogo', 200, 50);
复制代码


??如果最外层的条件不成立,则直接使用旧logo:
  1. $spacelogo = $oldspacelogo;
复制代码


??c) 更新空间表#@__member_space:

  1. ? ?$query = "UPDATE `#@__member_space` SET `pagesize` = '$pagesize',`spacename`='$spacename' , spacelogo='$spacelogo', `sign` = '$sign' ,`spacenews`='$spacenews' WHERE mid='{$cfg_ml->M_ID}' ";
  2. ? ? $dsql->ExecuteNoneQuery($query);
复制代码


??d) 设置会员空间的状态,即字段specesta的值:

  1. ? ? if($cfg_ml->M_Spacesta >= 0)
  2. ? ? {
  3. ? ?? ???$dsql->ExecuteNoneQuery("UPDATE `#@__member` SET spacesta=1 WHERE mid='{$cfg_ml->M_ID}' And spacesta < 1 ");
  4. ? ? }
复制代码


??也就是如果例如会员的状态大于零,登录后,设置了会员空间,则更新它的空间状态,要知道登录时使用的是缓存的会员状态,而此时是要更新空间,所以,这里要重新更新一下,这里有点不好理解。

??再解释一下会员状态指的是会员如果被禁言了,那么,它的会员状态就是-2。

??最后,提示成功,并退出程序:
  1. ? ? ShowMsg('成功更新空间信息!','edit_space_info.php');
  2. ? ? exit();
复制代码


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

本版积分规则

QQ|ag游戏客服|官方二次开发

GMT+8, 2019-11-13 19:56 , Processed in 0.630132 second(s), 26 queries .

Powered by Discuz! X3.2

? 2001-2013 Comsenz Inc.

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