【UCHome二次开发】功能修改
来源:
发布时间:2010/4/24
浏览次数:816
有些功能的修改涉及到了流程或数据需求的变动,这时候简单的修改模板文件已经无法解决问题,而是需要修改对应的流程和数据处理代码来完成。一般处理程序文件位于/source文件夹下,具体的定位请参考《【UCHome二次开发】主要文件说明》。具体的代码修改就是根据功能逻辑来调整php代码或是sql语句,这里就不展开了。下面举两个例子说明一下。
1、修改群组列表页面分页的每页显示条数
定位群组数据处理页面为/source/space_mtag.php,找到如下代码:
修改中间的数据为希望显示的条数即可。
2、修改群组列表页面单个群组提示
默认情况下,群组列表页面每个群组链接下方只提示有多少人参加了群组。如下图:
群组列表修改前界面
现在希望没有加入的群组显示 申请加入 链接,且显示已申请人数;已申请未通过的群组给出 已申请,等待审核 提示;已加入的群组按原来的提示,显示已加入的人数。
打印原来的数组数据,发现数据中没有申请中的人数和是否已加入群组的状态信息。于是便需要修改sql语句来获取想要的数据。在/source/space_mtag.php文件中,修改代码
1 |
$query = $_SGLOBAL [ 'db' ]->query( "SELECT * FROM " . $tablemtag . " WHERE fieldid='$id' ORDER BY membernum DESC LIMIT $start,$perpage" ); |
为
1 |
$query = $_SGLOBAL [ 'db' ]->query( "SELECT mtag.*, x.applynum, y.grade FROM " .tname( 'mtag' ). " mtag LEFT JOIN ( SELECT count( uid ) AS applynum, tagid FROM `" .tname( 'tagspace' ). "` WHERE grade = '-2' GROUP BY tagid ) AS x ON x.tagid = mtag.tagid LEFT JOIN ( SELECT * FROM uch_tagspace WHERE uid = " . $_SGLOBAL [ 'session' ][ 'uid' ]. " )y ON y.tagid = mtag.tagid WHERE mtag.fieldid = '$id' ORDER BY y.grade DESC, membernum DESC LIMIT $start,$perpage" ); |
通过以上修改,使SQL查询的返回结果增加了各个群组的申请中人数和当前用户在各个群组中的状态。
有了数据,再需要通过修改模板页面来改变显示内容。
找到群组分类的显示模板为space_mtag_field.htm,修改模板中群组列表的显示代码,如下:
03 |
< ul class = "thread_list" > |
06 |
< div class = "threadimg60" >< a href = "space.php?do=mtag&tagid=$value[tagid]" >< img src = "$value[pic]" style = "width:60px;" ></ a ></ div > |
07 |
< a href = "space.php?do=mtag&tagid=$value[tagid]" >$value[tagname]</ a >< br /> |
08 |
已有 < span class = "num" >$value[membernum]</ span > 人加入 |
12 |
< div class = "page" >$multi</ div > |
修改为
01 <
div
class
=
"box"
>
03 |
< ul class = "thread_list" > |
06 |
< div class = "threadimg60" >< a href = "space.php?do=mtag&tagid=$value[tagid]" >< img src = "$value[pic]" style = "width:60px;" ></ a ></ div > |
07 |
< a href = "space.php?do=mtag&tagid=$value[tagid]" >$value[tagname]</ a > |
12 |
< br />< span class = "num" >已提交申请,正等待审核</ span > |
14 |
< br />已有 < span class = "num" >$value[membernum]</ span > 人加入 |
18 |
< br />已有 < span class = "num" >$value[applynum]</ span > 人申请 |
22 |
< br />< a href = "cp.php?ac=apply&tagid=$value[tagid]" >申请加入</ a > |
26 |
< br />已有 < span class = "num" >$value[membernum]</ span > 人加入 |
31 |
< div class = "page" >$multi</ div > |
修改完成后,效果如下:
群组列表修改后界面
3、增加某些分类的群组申请个数限制
由于项目需求,需要限定读书小组限报一个群组,启航计划限报两个群组,需要做群组加入流程的改动。
找到群组申请相关代码,位于/source/space_mtag.php,如下代码块:
01 |
elseif ( $_GET [ 'op' ] == 'join' ) { |
03 |
$tagid = empty ( $_GET [ 'tagid' ])?0: intval ( $_GET [ 'tagid' ]); |
04 |
if (submitcheck( 'joinsubmit' )) { |
05 |
$mtag = mtag_join( 'tagid' , $tagid ); |
07 |
showmessage( 'mtag_join_error' ); |
09 |
showmessage( 'join_success' , "space.php?uid=$_SGLOBAL[supe_uid]&do=mtag&tagid=$mtag[tagid]" , 0); |
需要插入一段代码来改变处理流程,具体为在加入群组前增加已申请群组个数的检验,修改后代码如下:
01 |
elseif ( $_GET [ 'op' ] == 'join' ) { |
03 |
$tagid = empty ( $_GET [ 'tagid' ])?0: intval ( $_GET [ 'tagid' ]); |
06 |
$wheresql = "main.tagid='$tagid'" ; |
07 |
$query = $_SGLOBAL [ 'db' ]->query( "SELECT * FROM " .tname( 'mtag' ). " main WHERE $wheresql" ); |
08 |
if ( $mtag = $_SGLOBAL [ 'db' ]->fetch_array( $query )) { |
09 |
$fieldid = $mtag [ 'fieldid' ]; |
12 |
$t_tagspace = tname( 'tagspace' ); |
13 |
$t_mtag = tname( 'mtag' ); |
14 |
$count = $_SGLOBAL [ 'db' ]->result( $_SGLOBAL [ 'db' ]->query( "SELECT count(*) FROM $t_tagspace inner join $t_mtag on $t_tagspace.`tagid` = $t_mtag.`tagid` WHERE $t_tagspace.uid = " . $_SGLOBAL [ 'session' ][ 'uid' ]. " and $t_mtag.`fieldid` = $fieldid" ),0); |
15 |
if ( $fieldid == 4 && $count >= 1){ |
16 |
showmessage( '读书小组只能申请或参加 1 个' ); |
18 |
else if ( $fieldid == 5 && $count >= 2){ |
19 |
showmessage( '启航行动只能申请或参加 2 个' ); |
22 |
if (submitcheck( 'joinsubmit' )) { |
23 |
$mtag = mtag_join( 'tagid' , $tagid ); |
25 |
showmessage( 'mtag_join_error' ); |
27 |
showmessage( 'join_success' , "space.php?uid=$_SGLOBAL[supe_uid]&do=mtag&tagid=$mtag[tagid]" , 0); |
4、修改群组分类下的分类名称和显示分类个数
默认安装完后,群组分类中显示的是自由联盟、区域联盟、兴趣联盟,即使我们通过管理系统修改了群组分类的名称,页面上的群组分类页不改变。如下图所示:
默认情况下的群组分类
通过调试代码发现群组分类的显示内容是写到数据文件里的,对应为/data/data_profield.php文件,文件内容(默认情况)如下:
02 |
if (!defined( 'IN_UCHOME' )) exit ( 'Access Denied' ); |
03 |
$_SGLOBAL [ 'profield' ]=Array |
12 |
'manualmoderator' => 0, |
22 |
'manualmoderator' => 0, |
32 |
'manualmoderator' => 0, |
直接修改代码即可。改完的效果见前面的图。
以上举了4个列子来说明对UCHome功能进行修改的思路。其他的小改动相信也类似,同理类推。