【UCHome二次開發】功能修改
來源:
發布時間:2010/4/24
瀏覽次數:813
有些功能的修改涉及到了流程或數據需求的變動,這時候簡單的修改模板文件已經無法解決問題,而是需要修改對應的流程和數據處理代碼來完成。一般處理程序文件位于/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功能進行修改的思路。其他的小改動相信也類似,同理類推。