[經驗分享]將自訂個人資料欄位顯示在會員列表的方法(含排序)

與 phpBB 3.0.x 相關主題。

版主: 版主管理群

回覆文章
GPLynn
星球公民
星球公民
文章: 184
註冊時間: 2009-02-08 02:11

[經驗分享]將自訂個人資料欄位顯示在會員列表的方法(含排序)

文章 GPLynn »

前言(廢話可不看)
其實我po這篇文實在po得很心虛,因為大部分的程式碼都看不懂,只不過是參考了一些文章後又剛好被我改成功罷了!
想說平日受到各位前輩的幫助很多,雖然我還很外行,但總還是比上不足比下有餘吧?!
所以就大膽的來班門弄斧一番,希望能做點小小的回饋,請各位前輩多多指教~ :$
PS.因為有些修改的地方我想用顏色標示出來比較方便對照閱讀,所以就沒有用語法code把它包起來了。

本文開始
新增自訂個人資料欄位:
方法細節請參考將自訂個人資料欄位顯示在會員列表的方法
我的欄位定義跟老師的不太一樣,請自行轉換。
以下是我的欄位定義

學號
欄位定義: student_id
欄位類型: 數字

姓名
欄位定義: name
欄位類型: 單行文字欄位


將自訂個人資料欄位顯示在會員列表(含排序功能):
參考連結
將自訂個人資料欄位顯示在會員列表的方法
Adding custom profile field to memberlist
PS. 如有使用不同的欄位定義,請將其下所有student_idname置換成您所定義的名稱。(3欄以上只需依樣畫葫蘆)

prosilver styles
======================================================================================================

開啟
/styles/prosilver/template/memberlist_body.html

找到 (有兩處皆需做同樣的修改)

代碼: 選擇全部

<th class="posts"><a href="{U_SORT_POSTS}#memberlist">{L_POSTS}</a></th>
之前, 新增 (class='內容隨便打即可',或只用<th>亦可)
<th class="student_id"><a href="{U_SORT_STUDENT_ID}#memberlist">{L_STUDENT_ID}</a></th>
<th class="chinese_name"><a href="{U_SORT_NAME}#memberlist">{L_NAME}</a></th>

找到

代碼: 選擇全部

<td class="posts"><!-- IF memberrow.POSTS -->
之前, 新增
<td><!-- IF memberrow.PROFILE_STUDENT_ID_VALUE -->{memberrow.PROFILE_STUDENT_ID_VALUE}<!-- ELSE -->&nbsp;<!-- ENDIF --></td>
<td><!-- IF memberrow.PROFILE_NAME_VALUE -->{memberrow.PROFILE_NAME_VALUE}<!-- ELSE -->&nbsp;<!-- ENDIF --></td>

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

開啟 (中文字的部分請打你想要顯示的文字)
/language/zh_cmn_hant/common.php

找到

代碼: 選擇全部

'JOINED'			=> '註冊時間',
之後, 新增
'STUDENT_ID' => '學號',
'NAME' => '姓名',

找到

代碼: 選擇全部

'SORT_RANK'			=> '等級',
之後, 新增
'SORT_STUDENT_ID' => '學號',
'SORT_NAME' => '姓名',

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

開啓
/memberlist.php

找到

代碼: 選擇全部

$sort_key_sql['m'] = 'u.user_rank';
之後, 新增 (紅字的部分可參考上下內容使用尚未被定義的字母,如新增3欄可使用w或z等等)
$sort_key_text['x'] = $user->lang['SORT_STUDENT_ID'];
$sort_key_sql['x'] = 'fd.pf_student_id';

$sort_key_text['y'] = $user->lang['SORT_NAME'];
$sort_key_sql['y'] = 'fd.pf_name';

找到

代碼: 選擇全部

// Get us some users :D
之後, 新增 (註1)

代碼: 選擇全部

	if(isset($sort_key_sql['x']) || isset($sort_key_sql['y']))
	{
		$sql = "SELECT u.user_id
				FROM (" . USERS_TABLE . " u
				$sql_from)
				LEFT JOIN " . PROFILE_FIELDS_DATA_TABLE . " fd ON (u.user_id = fd.user_id)
				WHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")
				$sql_where
				ORDER BY $order_by";
	}
	else
	{
找到

代碼: 選擇全部

$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
之前, 新增

代碼: 選擇全部

}
找到

代碼: 選擇全部

'U_LIST_CHAR'
之後, 新增 (紅字經常忽略,請小心)
'U_SORT_STUDENT_ID' => $sort_url . '&sk=x&sd=' . (($sort_key == 'x' && $sort_dir == 'a') ? 'd' : 'a'),
'U_SORT_NAME' => $sort_url . '&sk=y&sd=' . (($sort_key == 'y' && $sort_dir == 'a') ? 'd' : 'a'),

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

如需更改預設的排序欄位可修改如下。

開啓
/memberlist.php

找到
$default_key = 'c'; // 'c'是未修改前預設排序欄位(註冊時間),可換成'x'即表以學號或'l'以最後訪問做為預設排序欄位。
$sort_key = request_var('sk', $default_key);
$sort_dir = request_var('sd', 'd'); // 'd'=降冪, 'a'=升冪


註1:
如有3欄以上,則改成

代碼: 選擇全部

if(isset($sort_key_sql['x']) || isset($sort_key_sql['y']) || isset($sort_key_sql['z']))
以此類推


最後剩下的問題就是中文排序時怪怪,我也不知道怎麼去fix它~ :((
●主機作業系統: 不詳(學校主機)
●上網方式: SeedNet ADSL
●phpBB 版本: phpBB 3.0.8 prosilver styles
●資料庫類型: MySQL 5.0.67 with phpMyAdmin 3.0.1.1
●安裝外掛: 太多了~族繁不及備載
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8510
註冊時間: 2004-04-30 01:54
來自: Taiwan

Re: [經驗分享]將自訂個人資料欄位顯示在會員列表的方法(含排序)

文章 心靈捕手 »

感謝您的經驗分享! (:Y)

內容相當完備清晰.
提供兩個心得參考:

1. 這個地方採用既有的 CSS 定義即可.
找到
<th class="student_id"><a href="{U_SORT_STUDENT_ID}#memberlist">{L_STUDENT_ID}</a></th>
<th class="chinese_name"><a href="{U_SORT_NAME}#memberlist">{L_NAME}</a></th>
取代成
<th class="posts"><a href="{U_SORT_STUDENT_ID}#memberlist">{L_STUDENT_ID}</a></th>
<th class="posts"><a href="{U_SORT_NAME}#memberlist">{L_NAME}</a></th>
當然也可以不必加; 否則, 若加入新的值, 則反而得到 *.css 裡頭去定義才有意義.

2. "排序" 大抵只是針對英文 (第一個) 字母數字有效.
  • ASC: 依序遞增 (升冪, sd=a)--
    • 英文字母: a -> z
    • 數字: 小 -> 大
  • DESC: 依序遞減 (降冪, sd=d)--
    • 英文字母: z -> a
    • 數字: 大 -> 小
對中文使用者而言, 以中文字的排序, 如: (中文) 會員名稱或中文姓名, 是無意義的.

P.S.
移動至 "教學文件庫".
施比受有福,祝福您好運! ^_^
歡迎光臨★★心靈捕手★★ :: 討論區
https://wang5555.dnsfor.me/phpBB3/
回覆文章

回到「3.0」