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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] 【Discuz! Support Team 出品】〖勋章中心 For Discuz!5.0.0正式版〗(01.06.更新)

[复制链接]
Eroland 发表于 2007-1-5 11:07:15 | 显示全部楼层 |阅读模式
#############################################
插件名称:勋章中心
适用版本:discuz 5.0
作  者:Discuz! Support Team】— 独自流浪
数据升级:需要添加一个字段
最后更新:2006-01-04 18:49
演  示:XXX
功能说明:允许用户前台浏览勋章信息 版主和超级版主可以前台颁发/收回勋章
备  注:只是将PW勋章中心移植到discuz5.0中
注意事项:有什么问题可以反馈给我 也可以到http://www.discuzsupport.net发帖询问
#############################################

【Discuz! Support Team 出品】〖勋章中心 For Discuz!5.0.0正式版〗--独自流浪

本次对于勋章中心的制作,来源于对PW官方自带的勋章中心的功能,去掉DZ官方论坛部分勋章中心带有的勋章出售功能(原因:勋章,之所以称呼为荣誉勋章,是应该以颁发作为一种荣誉的象征,而不是指出售^_^! 别拍砖,感觉这样的话,更能够让勋章发挥它存在的价值与意义!)。此外,本次制作,在研究了PW版勋章中心代码的基础上,重写了80%代码,使之能够更好的发挥在DZ论坛程序之上……
另外,作为D.S.T团队的一员,送上这样的插件,也希望大家能够支持我们,只有你们的支持,才是我们发展的最大动力哦……


全新安装开始:

一、升级数据库cdb_medals,添加一个字段,用来做勋章介绍信息。(鉴于只升级一个字段因此就不做安装文件了)

  1. ALTER TABLE `cdb_medals` ADD `info` VARCHAR( 255 ) NOT NULL AFTER `name` ;
复制代码


卸载的时候(安装不用执行)

  1. ALTER TABLE `cdb_medals` DROP `info`
复制代码


二、打开include/cache.func.php文件(如果不想手动修改,我的附件已经包括下面修改的2个文件,覆盖之前记得备份,请跳到第三步),查找:

  1. $cols = 'medalid, name, image';
复制代码


修改为:

  1. $cols = 'medalid, name, info, image';
复制代码


继续查找:

  1. $data[$medal['medalid']] = array('name' => $medal['name'], 'image' => $medal['image']);
复制代码


修改为:

  1. $data[$medal['medalid']] = array('name' => $medal['name'], 'info' => $medal['info'], 'image' => $medal['image']);
复制代码


接着打开admin/misc.inc.php,查找:

  1. if(!defined('IN_DISCUZ') || !isset($PHP_SELF) || !preg_match("/[\/\\\\]admincp\.php$/", $PHP_SELF)) {
  2.         exit('Access Denied');
  3. }
复制代码


在下面添加函数:

  1. function ifcheck($value, $name) {
  2.         if($value) {
  3.                 global ${$name.'_Y'};
  4.                 ${$name.'_Y'} = 'checked';
  5.         } else {
  6.                 global ${$name.'_N'};
  7.                 ${$name.'_N'} = 'checked';
  8.         }
  9. }
复制代码


继续查找:

  1.                
  2.                                 "<td class="altbg1" width="48"><input class="checkbox" type="checkbox" name="delete[]" value="$medal[medalid]"></td>\n".
  3.                                 "<td class="altbg2"><input type="text" size="30" name="name[$medal[medalid]]" value="$medal[name]"></td>\n".
  4.                                 "<td class="altbg1"><input class="checkbox" type="checkbox" name="available[$medal[medalid]]" value="1" $checkavailable></td>\n".
  5.                                 "<td class="altbg2"><input type="text" size="25" name="image[$medal[medalid]]" value="$medal[image]">\n".                               
复制代码


修改为:


  1.                                 "<td class="altbg1" width="48"><input class="checkbox" type="checkbox" name="delete[]" value="$medal[medalid]"></td>\n".
  2.                                 "<td class="altbg2"><input type="text" size="15" name="name[$medal[medalid]]" value="$medal[name]"></td>\n".
  3.                                 "<td class="altbg1"><input type="text" size="30" name="info[$medal[medalid]]" value="$medal[info]" maxlength="255"></td>\n".
  4.                                 "<td class="altbg2" width="48"><input class="checkbox" type="checkbox" name="available[$medal[medalid]]" value="1" $checkavailable></td>\n".
  5.                                 "<td class="altbg1"><input type="text" size="15" name="image[$medal[medalid]]" value="$medal[image]">\n".                               
复制代码



继续查找:

  1.                 shownav('menu_misc_medals');
  2.                 showtips('medals_tips');
复制代码


下面添加:

  1.                 //medal start
  2.                 require_once(DISCUZ_ROOT.'./plugins/medals_center/md_config.php');
  3.                
  4.                 ifcheck($md_ifopen,'ifopen');
  5.                 ifcheck($md_ifmsg,'ifmsg');
  6.                
  7.                 $medal_admins = array(1 => 'admin', 2 => '超级版主', 3 => '版主');        //管理组id 1:admin 2:超级版主 3:版主
  8.                 foreach($medal_admins as $key => $admin) {
  9.                        
  10.                         $checked .= "<input type='checkbox' name='groups[]' value='$key' ".(strpos($md_groups,",$key,")!==false ? 'checked' : '').">$admin&nbsp";       
  11.                
  12.                 }        //medal end       
复制代码


继续查找:


  1. <td><input type="text" size="30" name="newname"></td>
  2. <td><input class="checkbox" type="checkbox" name="availablenew" value="1"></td>
  3. <td><input type="text" size="25" name="newimage"></td>
复制代码


修改为:


  1. <td><input type="text" size="15" name="newname"></td>
  2. <td><input type="text" size="30" name="newinfo" maxlength="255"></td>
  3. <td><input class="checkbox" type="checkbox" name="availablenew" value="1"></td>
  4. <td><input type="text" size="15" name="newimage"></td>
复制代码



继续查找:

  1. <center><input class="button" type="submit" name="medalsubmit" value="<?=$lang['submit']?>"></center></form>
复制代码


下面添加:

  1. <!--{medal start}-->
  2. <form action="admincp.php?action=medals" method="post">
  3. <input type="hidden" name="formhash" value="<?=FORMHASH?>">
  4. <input type=hidden name="step" value="config">
  5. <table width="100%" align="center" border="0" cellpadding="0" cellspacing="0" class="tableborder">
  6. <tr class="header"><td colspan="2">勋章插件管理</td></tr>
  7. <tr>
  8. <td width="30%">是否前台开启勋章功能</td>
  9. <td>
  10. <input type="radio" value="1" name="config[md_ifopen]" <?=$ifopen_Y?>> 是
  11. <input type="radio" value="0" name="config[md_ifopen]" <?=$ifopen_N?>> 否
  12. </td>
  13. </tr>
  14. <tr>
  15. <td>颁发(摘除)勋章是否短消息通知用户</td>
  16. <td>
  17. <input type="radio" value="1" name="config[md_ifmsg]" <?=$ifmsg_Y?>> 是
  18. <input type="radio" value="0" name="config[md_ifmsg]" <?=$ifmsg_N?>> 否
  19. </td>
  20. </tr>
  21. <tr>
  22. <td>颁发(摘除)勋章用户组权限</td>
  23. <td>
  24. <?=$checked?>               
  25. </td>
  26. </tr>
  27. </table>
  28. <br>
  29. <center><input class="button" type="submit" name="medalsubmit" value="<?=$lang['submit']?>"></center>
  30. </form>
  31. <!--{medal end}-->
复制代码


继续查找:


  1. $db->query("UPDATE {$tablepre}medals SET name=".($name[$id] ? '\''.dhtmlspecialchars($name[$id]).'\'' : 'name').", available='$available[$id]', image=".($image[$id] ? '\''.$image[$id].'\'' : 'image')." WHERE medalid='$id'");
复制代码


修改为:


  1. $db->query("UPDATE {$tablepre}medals SET name=".($name[$id] ? '\''.dhtmlspecialchars($name[$id]).'\'' : 'name').", info=".($info[$id] ? '\''.dhtmlspecialchars($info[$id]).'\'' : '\'\'').", available='$available[$id]', image=".($image[$id] ? '\''.$image[$id].'\'' : 'image')." WHERE medalid='$id'");
复制代码


继续查找:


  1. $db->query("INSERT INTO        {$tablepre}medals (name, available, image) VALUES ('".dhtmlspecialchars($newname)."', '$newavailable', '$newimage')");
复制代码


修改为:


  1. $db->query("INSERT INTO        {$tablepre}medals (name, info, available, image) VALUES ('".dhtmlspecialchars($newname)."', '".dhtmlspecialchars($newinfo)."', '$newavailable', '$newimage')");
复制代码


继续查找:

  1. if($newname != '' && $newimage != '') {
  2.                         $db->query("INSERT INTO        {$tablepre}medals (name, info, available, image) VALUES ('".dhtmlspecialchars($newname)."', '".dhtmlspecialchars($newinfo)."', '$newavailable', '$newimage')");
  3.                 }
复制代码


下面添加:

  1.                 if($step == 'config') {                //medal start
  2.                         if(is_array($groups)){
  3.                                 $config['md_groups']=','.implode(',',$groups).',';
  4.                         }else{
  5.                                 $config['md_groups']='';
  6.                         }
  7.                        
  8.                         $md_config = "<?php\n";
  9.                         foreach($config as $key=>$value){
  10.                                 $md_config .= "\$$key = '$value';\n";
  11.                         }
  12.                         $md_config .= "?>";
  13.                        
  14.                         $fp = @fopen(DISCUZ_ROOT.'./plugins/medals_center/md_config.php','w') or cpmsg('medal配置文件打开出错,查看是否设置了0777权限', 'admincp.php?action=medals');
  15.                         @fwrite($fp, $md_config) or cpmsg('medal配置文件写入出错,查看是否设置了0777权限', 'admincp.php?action=medals');
  16.                 }        //medal end
复制代码


以上文件就是后台和缓存文件需要的修改了,到此代码修改完毕,如果直接copy我的文件的话,那么就动手了!

三、将附件解压缩出来,按照路径分别粘贴到相应的文件夹!

这里介绍一下每个文件的用处

-- plugins
      -- medals_center
            -- md_config.php    勋章中心 配置文件,修改的配置全部在这里面,不要修改,因为是动态变化的!
            -- medalcache.inc.php  用户勋章信息缓存文件,用来生成用户勋章的缓存信息,一般不需要动!
            -- medals_index.inc.php  用户前台调用文件,可以按照自己的页面修改显示的记录数,我有汉字的注释!
-- templates
      -- default
            -- medals_index.htm  模版文件,随你修改,别修改的不能调用(一句老话,修改之前备份)
-- include
      -- cache.func.php  discuz的缓存文件,除非你很清醒的知道你在做什么,负责请不要乱修改!
-- admin
      -- misc.inc.php  discuz后台文件,很多杂项都是在这个文件下修改的,除非你很清醒的知道你在做什么,负责请不要乱修改!
-- discuz_plugin_medals_center.txt  装过插件的人都知道,discuz的插件安装需要导入这个文件,假如你动了它,出现问题概不负责!


四、后台导入插件discuz_plugin_medals_center.txt文档。

五、更新缓存。这时候可以享受自己的劳动成果了!

六、 附件和图片展示!







=======================================================================

问题更新:

1.关于9楼同志的问题,已经修复,请重新下载附件.....

2.关于49楼的同志,本贴做出了更新,请参考作者的贴子说明,1楼内容重新更新过^
=======================================================================

[ 本帖最后由 Eroland 于 2007-1-6 17:52 编辑 ]

评分

3

查看全部评分

安. 发表于 2007-1-5 11:09:33 | 显示全部楼层
SF
回复

使用道具 举报

清风飘客 发表于 2007-1-5 11:10:15 | 显示全部楼层
发过囖。不错的东西
回复

使用道具 举报

hnxxwyq 发表于 2007-1-5 11:14:03 | 显示全部楼层
关于发过得问题,我做下解释:
第一,发得贴是网上朋友转过来得。
第二,格式有点不雅观!看了不好安装!
第三,这个是以团队名义发布得!另外发布之前肯定要测试一下,所以首发在http://www.discuzsupport.net,内部需要测试一下!

[quote]原帖由 JWJ9952 于 2007-1-5 12:19 发表
在勋章简介中您获得的勋章一栏显示错误,不是实际勋章,当在获得勋章名单 、勋章颁发情况 | 颁发勋章 中时,勋章显示正常
看您的演示图也可以看出了。
https://discuz.dismall.com/attachments/month_0701/t1_wHfm ...


关于这个问题,是因为discuz得缓存是按照id排列勋章,我在程序里因为要按页排列,所以把索引给改了,所以出现了该问题,现在已经修复,你可以下载最新得附件覆盖plugins/medals_center/medals_index.inc.php文件,就可以修复该问题!

并请告知如何让超版拥有颁发权限,后台设置超版有此权限也不行。

在后台设置了权限以后就可以了,如果不能设置得话,麻烦你把plugins/medals_center/md_config.php得内容贴出来,我看你是不是设置了该权限![/quote]



关于#21楼木辛歪歪提出的问题
[quote]INSERT INTO cdb_settings VALUES ('sellmedals', '0');
INSERT INTO cdb_settings VALUES ('deleuid', '0');
INSERT INTO cdb_settings VALUES ('delegid', '0');
INSERT INTO cdb_settings VALUES ('mostmedals', '0');
ALTER TABLE `cdb_memberfields` ADD `last` varchar(25) NOT NULL default '0';
ALTER TABLE `cdb_medals` ADD `use` tinyint(1) NOT NULL default '0';
ALTER TABLE `cdb_medals` ADD `rest` mediumint(8) NOT NULL default '0';
ALTER TABLE `cdb_medals` ADD `lastuser` varchar(32) default '';

ALTER TABLE `cdb_medals` ADD `s1` mediumint(8) NOT NULL default '0',ADD `r1` mediumint(8) NOT NULL default '0',ADD `s2` mediumint(8) NOT NULL default '0',ADD `r2` mediumint(8) NOT NULL default '0',ADD `s3` mediumint(8) NOT NULL default '0',ADD `r3` mediumint(8) NOT NULL default '0',ADD `s4` mediumint(8) NOT NULL default '0',ADD `r4` mediumint(8) NOT NULL default '0',ADD `s5` mediumint(8) NOT NULL default '0',ADD `r5` mediumint(8) NOT NULL default '0',ADD `s6` mediumint(8) NOT NULL default '0',ADD `r6` mediumint(8) NOT NULL default '0',ADD `s7` mediumint(8) NOT NULL default '0',ADD `r7` mediumint(8) NOT NULL default '0',ADD `s8` mediumint(8) NOT NULL default '0',ADD `r8` mediumint(8) NOT NULL default '0';

ALTER TABLE `cdb_medals` ADD `post` mediumint(8) NOT NULL default '0',ADD `credit` mediumint(8) NOT NULL default '0',ADD `regday` mediumint(8) NOT NULL default '0',ADD `digest` mediumint(8) NOT NULL default '0',ADD `pageview` mediumint(8) NOT NULL default '0',ADD `online` mediumint(8) NOT NULL default '0',ADD `admin` mediumint(8) NOT NULL default '0',ADD `thread` mediumint(8) NOT NULL default '0',ADD `reply` mediumint(8) NOT NULL default '0';

关于这个反安装码的声明:

"本次替朋友解决问题,因此给出了其需要的反安装代码,如果本代码侵犯了前勋章中心作者的利益,请与我取得联系...马上删除处理."

PS:个人觉得用那个插件都一样,只选择适合自己的,不一定强调使用我们团队的插件!


反安装代码:

DELETE FROM `cdb_settings` WHERE 'variable' = 'sellmedals' LIMIT 1;
DELETE FROM `cdb_settings` WHERE 'variable' = 'deleuid' LIMIT 1;
DELETE FROM `cdb_settings` WHERE 'variable' = 'delegid' LIMIT 1;
DELETE FROM `cdb_settings` WHERE 'variable' = 'mostmedals' LIMIT 1;
       
ALTER TABLE `cdb_memberfields` DROP `last`;
ALTER TABLE `cdb_medals` DROP `use`;
ALTER TABLE `cdb_medals` DROP `rest`;
ALTER TABLE `cdb_medals` DROP `lastuser`;

ALTER TABLE `cdb_medals`
        DROP `s1` ,
        DROP `r1` ,
        DROP `s2` ,
        DROP `r2` ,
        DROP `s3` ,
        DROP `r3` ,
        DROP `s4` ,
        DROP `r4` ,
        DROP `s5` ,
        DROP `r5` ,
        DROP `s6` ,
        DROP `r6` ,
        DROP `s7` ,
        DROP `r7` ,
        DROP `s8` ,
        DROP `r8` ;

ALTER TABLE `cdb_medals`
        DROP `post` ,
        DROP `credit` ,
        DROP `regday` ,
        DROP `digest` ,
        DROP `pageview` ,
        DROP `online` ,
        DROP `admin` ,
        DROP `thread` ,
        DROP `reply` ;
[/quote]

[quote]原帖由 TaoHot 于 2007-1-5 19:23 发表
我安装了,但是我怎么看不到勋章的介绍那个空格啊,后台里没有啊

看了你的图片里有,但是我的后台怎么没有勋章介绍那个空格啊,

关于这个问题:1,你是否执行了第一步,看看你的数据库有没有info这个字段;2,后台是否设置了介绍!


原帖由 TaoHot 于 2007-1-5 21:43 发表在discuz.dismall.com论坛上
问下,关于我后台显示不出勋章说明的编辑栏那个匡,我是依照上面的修改,但是不能显示出来,

我覆盖你给的下载的文件中的admin.mis.in.php 这文件后,发现,可以显示后台的勋章说明编辑栏

这样应该是你在 ...


这个问题确实是我个人的因素,没有将所有的问题考虑到,而出现了这个问题,现在已经修改了编辑代码的说明,对大家说声对不起,感谢TaoHot对我提出问题,我在这里说声谢谢!现在所说的问题都已经解决![/quote]

[ 本帖最后由 hnxxwyq 于 2007-1-6 17:43 编辑 ]
回复

使用道具 举报

 楼主| Eroland 发表于 2007-1-5 11:14:28 | 显示全部楼层
恩,昨天晚上出现过了...不过并不是团队内部发出滴...

我想,马上会在团队论坛上增加插件的演示了....
回复

使用道具 举报

fy007 发表于 2007-1-5 11:17:52 | 显示全部楼层
先支持一下了////
回复

使用道具 举报

chinaoy 发表于 2007-1-5 11:18:35 | 显示全部楼层
有人发过了
回复

使用道具 举报

ztonline 发表于 2007-1-5 11:23:11 | 显示全部楼层
:) 发过了吧!!!
回复

使用道具 举报

ywxs 发表于 2007-1-5 12:04:32 | 显示全部楼层
在勋章简介中您获得的勋章一栏显示错误,不是实际勋章,当在获得勋章名单 、勋章颁发情况 | 颁发勋章 中时,勋章显示正常
看您的演示图也可以看出了。

两个论坛全是如此。
并请告知如何让超版拥有颁发权限,后台设置超版有此权限也不行。
回复

使用道具 举报

 楼主| Eroland 发表于 2007-1-5 13:00:11 | 显示全部楼层
原帖由 ywxs 于 2007-1-5 12:04 发表
在勋章简介中您获得的勋章一栏显示错误,不是实际勋章,当在获得勋章名单 、勋章颁发情况 | 颁发勋章 中时,勋章显示正常
看您的演示图也可以看出了。

两个论坛全是如此。
并请告知如何让超版拥有颁发权限 ...


请稍等....
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 08:38 , Processed in 0.113980 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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