第 1 頁 (共 1 頁)
[問題]請問我想限制發文達 50 篇才能使用簽名檔
發表於 : 2005-12-09 11:20
由 吉川拓也
問題外掛:這個沒有參考連結
參考連結:無\r
使用版本:2.0.18
網站位置:
http://gamania.idv.tw
狀況描述:
目前想限制簽名檔使用者要發文達 50 篇才能使用這功能 !
所以就寫了一段判斷句但是放在 usercp_register.php
但怎麼放都不太順暢 ..
代碼: 選擇全部
if ( $userdata['user_posts'] < 50 )
{
$message .= '您的發文數量必須超過 50 篇才能使用簽名檔<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');
message_die(GENERAL_ERROR, $message);
}
所以想請有相同問題困擾的學長、弟一起研究一下

發表於 : 2005-12-09 13:31
由 在思緒重疊之前
所謂的不太順暢是甚麼意思=_=?
可是我看你家很正常阿-.-
發表於 : 2005-12-09 13:41
由 吉川拓也
在思緒重疊之前 寫:所謂的不太順暢是甚麼意思=_=?
可是我看你家很正常阿-.-
因為日前無法註冊 ..
就是卡在這段 . 所以要找個位置擺放 ..
流程地方要擺正確不然會影響註冊 ..
目前是沒有修改的狀態下 ..
所以沒什麼問題

發表於 : 2005-12-09 13:48
由 ~倉木麻衣~
記得之前在您的站上有試著修改過自己的資料, 並未填寫簽名檔, 但是卻出現文中所提及的錯誤訊息\r
不知您所謂的不太順暢是否就是指這種狀況
只要發文數量未達限定條件者, 不論簽名檔有無內容都會出現錯誤訊息\r
如果是的話, 建議將上述程式碼放到這行之前
代碼: 選擇全部
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' )
也就是在 if ( $signature != '' ) 的判斷式裡判斷發文數即可\r
另外, 個人會將它修改成這樣子
代碼: 選擇全部
if ( $mode == 'register' || ($mode == 'editprofile' && $userdata['user_posts'] < 50) )
{
$error = TRUE;
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . 'Only posts over than 50 can use signature.';
}
因為訪客發表文章也會增加它的user_posts數\r
所以只判斷文章數的話, 那麼在會員註冊時就有可能可以直接跳過發文數的限制
發表於 : 2005-12-09 13:59
由 動機不明
我想的最簡單\r
直接放 viewtopic.php 就可以了... (未加入訪客判斷)
代碼: 選擇全部
if ( $user_sig != '' )
{
$user_sig = '<br /><br /><font color="#FF6600">------------------------------------</font><font color="#888888"><br />' . str_replace("
", "
<br />
", $user_sig);
if ( $postrow[$i]['user_posts'] < 50 )
{
$user_sig = '<br /><br /><font color="#FF6600">------------------------------------</font><font color="#888888"><br />您的發文數量必須超過 50 篇才能使用簽名檔';
}
}
發表於 : 2005-12-09 15:17
由 吉川拓也
嗯嗯 ~ 我試試看^^~
感謝兩位學長幫忙

發表於 : 2005-12-09 16:07
由 Mac
我記得官方那邊有一些對於簽名檔做出限制的外掛,不過忘了是在認證的版面還是 BETA 版看到的
~Mac
發表於 : 2005-12-10 12:23
由 御津闇慈
大家想的太複雜了吧...||||
只要用assign_block_vars就可以搞定了......
打開usercp_register.php
尋找\r
代碼: 選擇全部
$template->set_filenames(array(
'body' => 'profile_add_body.tpl')
上方加入\r
代碼: 選擇全部
自己的篇數 大於 50篇的話 就啟用\r
if($userdata['user_posts'] > 50)
{
$template->assign_block_vars('signatur_on', array());
}
開啟profile_add_body.tpl
尋找\r
代碼: 選擇全部
<tr>
<td class="row1"><span class="gen">{L_SIGNATURE}:</span><br /><span class="gensmall">{L_SIGNATURE_EXPLAIN}<br /><br />{HTML_STATUS}<br />{BBCODE_STATUS}<br />{SMILIES_STATUS}</span></td>
<td class="row2">
<textarea name="signature" style="width: 300px" rows="6" cols="30" class="post">{SIGNATURE}</textarea>
</td>
</tr>
替換成
代碼: 選擇全部
<!-- BEGIN signatur_on -->
<tr>
<td class="row1"><span class="gen">{L_SIGNATURE}:</span><br /><span class="gensmall">{L_SIGNATURE_EXPLAIN}<br /><br />{HTML_STATUS}<br />{BBCODE_STATUS}<br />{SMILIES_STATUS}</span></td>
<td class="row2">
<textarea name="signature" style="width: 300px" rows="6" cols="30" class="post">{SIGNATURE}</textarea>
</td>
</tr>
<!-- END signatur_on -->
這樣就可以把個人資料的簽名檔給他隱藏起來
等到滿足篇數就會自動顯示
發表於 : 2005-12-10 14:54
由 ~倉木麻衣~
御津闇慈 寫:大家想的太複雜了吧...||||
只要用assign_block_vars就可以搞定了......
如同前述的, 訪客發文時也會增加他的user_posts數量
因此單就user_posts來判斷的話, 還會是會有漏洞
假設在修改之前, 訪客的發文數量尚未超過限定條件, 那麼當然是可以達到目的
但若是訪客的發文數量在修改之前就已超出限定值的話, 那麼新註冊的會員就可以完全不受限制, 可以在一開始時就使用簽名檔了(只要在註冊時有填簽名檔內容的話)
這樣反而不合理
我想, 這個可以自行在測試站台上稍微測試一下就知道了
所以還是有必要判斷載入usercp_regiater.php時的mode為何才合理
發表於 : 2005-12-10 17:00
由 御津闇慈
~倉木麻衣~ 寫:御津闇慈 寫:大家想的太複雜了吧...||||
只要用assign_block_vars就可以搞定了......
如同前述的, 訪客發文時也會增加他的user_posts數量
因此單就user_posts來判斷的話, 還會是會有漏洞
假設在修改之前, 訪客的發文數量尚未超過限定條件, 那麼當然是可以達到目的
但若是訪客的發文數量在修改之前就已超出限定值的話, 那麼新註冊的會員就可以完全不受限制, 可以在一開始時就使用簽名檔了(只要在註冊時有填簽名檔內容的話)
這樣反而不合理
我想, 這個可以自行在測試站台上稍微測試一下就知道了
所以還是有必要判斷載入usercp_regiater.php時的mode為何才合理
這樣倒是還有解決方式
在增加&& $userdata['session_logged_in']下去\r
這樣的話可以解決了
發表於 : 2005-12-10 17:27
由 心靈捕手
雖然目標相同, 但是卻可以有不同的方法來達成.
1.
~倉木麻衣~ 兄的作法:
算是回應
吉川拓也 大大的需求, 而做最佳的修改.
如此一來, 便可以在會員註冊時, 或者是已註冊會員修改個人資料時, 提出此一訊息.
ps. 但是底下這個代碼, 應該是有新增其他外掛而加入\r
代碼: 選擇全部
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' )
我查看 phpbb 2.0.18 原始碼如下:
代碼: 選擇全部
if ( $signature_bbcode_uid == '' )
2.
動機不明 大大的方法:
這個方法算是讓會員"
看得到, 吃不到" 的方法, 也是一絕!
ps.
由於訪客並無法編輯簽名檔, 所以應該可以不必加入訪客身分的判斷.
3.
御津闇慈 大大的方法:
應該也是可行, 不過得再加上訪客身分的判斷才行.
否則, 假設論壇訪客所發表的文章數, 如果超過該限制的話,
那麼會員在註冊時, 便會出現編輯簽名的欄位;
若有會員在註冊時, 就已經設定了簽名,
則註冊後, 反而無法進入個人資料去編輯.
ps.
發表後, 卻看到
御津闇慈 大大的回文,
經過測試, 再加上這個條件( && $userdata['session_logged_in']), 已經可行.

發表於 : 2005-12-10 17:57
由 ~倉木麻衣~
心靈捕手 寫:ps. 但是底下這個代碼, 應該是有新增其他外掛而加入\r
代碼: 選擇全部
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' )
我查看 phpbb 2.0.18 原始碼如下:
代碼: 選擇全部
if ( $signature_bbcode_uid == '' )
咦?
我是蠻確定在phpBB 2.0.18裡那一行是長這樣\r
代碼: 選擇全部
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' )
而且剛才重抓一次竹貓及phpBB官方的ZIP檔回來查看, 也確定是如同個人上述所貼的程式碼沒錯\r
Never mind
正因每個人思考的方式不同, 所以程式的實作也沒有絕對的, 最終還是會達到目標

發表於 : 2005-12-10 18:10
由 心靈捕手
To
~倉木麻衣~:
拍謝!
我看到的是 phpbb 2.0.17
此處代碼升級後就是您所寫出的
以下是 phpBB 2.0.17 to phpBB 2.0.18 Code Changes
關於 includes/usercp_register.php 部分擷取
代碼: 選擇全部
#
#-----[ FIND ]---------------------------------------------
#
if ( $signature_bbcode_uid == '' )
#
#-----[ REPLACE WITH ]---------------------------------------------
#
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' )
發表於 : 2005-12-10 23:04
由 吉川拓也
感謝眾多學長們一起腦力激盪
目前弟已經找出大概適用於自己站上方式了 ~