[原創][外掛] 付費瀏覽

MODs Released by Other phpbb Sites
非官方認證通過之 MOD ,或許有安全性之疑慮,所有問題由原發表者回覆!

版主: 版主管理群

主題已鎖定
KCTONY
星球公民
星球公民
文章: 158
註冊時間: 2002-06-20 18:44
來自: GB
聯繫:

[原創][外掛] 付費瀏覽

文章 KCTONY »

小弟我第一次寫的MOD ^_^"
弄了好幾天 有些地方感覺還是怪怪的...
有錯誤的地方要回報給我喔 ~ 還有更好的建議的話 ~ 要跟我說喔 ^^ :-D
demo : http://www.e-legend.com.tw/swdol/php/bb/

要改到的地方漫多
有好幾個是為了防止沒付錢就偷看文章寫的
大家也幫忙找看看哪些地方可以不用付錢就偷看~

有問題就回到另一個主題吧~ 這裡無法回應 ^^
http://phpbb-tw.net/phpbb/viewtopic.php?t=9886

----------------------------------------------------------
2002/8/26 21:00 修改訪客付費問題
http://phpbb-tw.net/phpbb/viewtopic.php?p=59927#59927
----------------------------------------------------------
2002/8/26 23:00 有些碼亂掉了 關閉本文的語法
裝過有問題的就重新安裝吧\r
----------------------------------------------------------
2002/8/27 16:00 修正 serch.php問題
http://phpbb-tw.net/phpbb/viewtopic.php?p=60179#60179
----------------------------------------------------------
2002/8/27 16:00 如果有裝 友善列印 MOD要加裝
http://phpbb-tw.net/phpbb/viewtopic.php?p=60176#60176

----------------------------------------------------------
2002/8/28 19:00 viewtopic.php 再修改\r
http://phpbb-tw.net/phpbb/viewtopic.php?p=60463#60463

----------------------------------------------------------
2002/9/1 01:00 posting.php BUG 修改\r
http://phpbb-tw.net/phpbb/viewtopic.php?p=61173#61173

----------------------------------------------------------
2002/9/13 01:00 topic_review BUG修改\r
http://phpbb-tw.net/phpbb/viewtopic.php?p=63305#63305

----------------------------------------------------------
2002/9/15 07:25 整合attach file mod (有裝的人在裝 沒裝的就不用了)
http://phpbb-tw.net/phpbb/viewtopic.php?p=63549#63549

----------------------------------------------------------
有人提到使用者會漫天開價,那就改成選單式吧!(不包含在原始檔中)
http://phpbb-tw.net/phpbb/viewtopic.php?p=64088#64088

----------------------------------------------------------
增加可以設定使用者權限 (不包含在原始檔中)
http://phpbb-tw.net/phpbb/viewtopic.php?t=11008

----------------------------------------------------------
都沒裝過就從下面開始裝

=開始=

SQL 語法:

ALTER TABLE phpbb_posts_text
ADD pay_money MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL,
ADD pay_user TEXT NOT NULL,
ADD pay_see MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL,
ADD pay_gotmoney MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL;
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_paymoney', '1');



打開 language\lang_chinese_traditional_taiwan\lang_main.php
// Pay_Money_MOD
$lang['Paymoney_Nomoney'] = "現金不足, 無法付款.";
$lang['Paymoney_is_ON'] = "文章收費 <u>開啟</u>";
$lang['Paymoney_is_OFF'] = "文章收費 <u>關閉</u>";
$lang['paymoney_set_money'] = "這篇文章是否需要收費";
$lang['Paymoney_Need'] = "本文需要付錢才能觀看,需要:";
$lang['Paymoney_Paytoposter'] = "原發文者已收到您的匯款!<br>以下是本文:";
$lang['Paymoney_Poster'] = "人付費看過您的文章,您所獲得的收入:";
$lang['Paymoney_Payok'] = "您已付錢給此篇文章原發文者.";
$lang['Paymoney_paysee'] = "人已付費觀看過此文,源發文者一共獲得:";
$lang['Paymoney_Cantquote'] = "原文需要付費才能觀看,無法引用.";
$lang['Paymoney_Cantrew'] = "原文需要付費才能觀看,無法觀看.";
$lang['Paymoney_Cantupda'] = "無法更新付費資料/無法更新付費人數!";
$lang['Paymoney_Cantupdate'] = "無法更新會員的貨幣!";


打開 language\lang_chinese_traditional_taiwan\lang_admin.php
找地方加入\r

// Pay_Money_Mod
$lang['Allow_Paymoney'] = "允許使用者設定付費文章";



打開 Viewtopic.php

尋找\r

// Go ahead and pull all data for this topic
//
$sql = "SELECT

在SELECT後面那一大串的最後面加上
, pt.pay_money, pt.pay_user, pt.pay_see, pt.pay_gotmoney

例如 (由於這部分常常會去改到 有加過其他MOD的請別直接COPY)
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_money, u.user_bank, u.user_level, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, u.user_allow_viewonline, u.user_session_time ,p.* ,pt.post_text, pt.post_subject, pt.bbcode_uid, u.user_robfail, pt.pay_money, pt.pay_user, pt.pay_see, pt.pay_gotmoney


尋找\r

$template->assign_block_vars('postrow', array(


在前面加入\r


// Pay_Money_MOD By KCTONY
$pay_money = $postrow[$i]['pay_money'];
$pay_user = $postrow[$i]['pay_user'];
$pay_see = $postrow[$i]['pay_see'];
$user_id = 'id' . $userdata['user_id'] . ',';
$temp_url = append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $postrow[$i]['post_id'] . "#" . $postrow[$i]['post_id']);
$returnurl = '<br><br><a href=' . $temp_url . '> << 返回 >> <a>';

if ( $mode == 'pay_money' && $p == $postrow[$i]['post_id'] && $userdata['user_id'] > 0 )
{
if ( $userdata['user_money'] < $pay_money)
{
message_die(GENERAL_MESSAGE, $lang['Paymoney_Nomoney'] . $returnurl);
}
$sql = "UPDATE " . USERS_TABLE . " SET user_money = user_money + $pay_money WHERE user_id = " . $poster_id;
if( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['Paymoney_Cantupdate'], "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . USERS_TABLE . " SET user_money = user_money - $pay_money WHERE user_id = " . intval($userdata['user_id']);
if( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['Paymoney_Cantupdate'], "", __LINE__, __FILE__, $sql);
} else {
$sql = "UPDATE " . POSTS_TEXT_TABLE . " SET pay_user = '".$pay_user.$user_id."', pay_see = pay_see + 1, pay_gotmoney = pay_gotmoney + $pay_money WHERE post_id = ".$p;
if( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['Paymoney_Cantupda'], "", __LINE__, __FILE__, $sql);
} else {
$message = '<p><font color="#FF0000">' . $lang['Paymoney_Paytoposter'] . '</font><br>----------</p>'.$message;
}
}
} else {
if($pay_money > 0)
{
If ($poster_id == $userdata['user_id'])
{
$message = $message . '<p>----------<br><font color="#FF0000">' . $pay_see . $lang['Paymoney_Poster'] . $postrow[$i]['pay_gotmoney'] . $lang['Virtual_Money'] . '</font></p>';
} else {
if (stristr($pay_user,$user_id)) {
$message = $message . '<p>----------<br><font color="#FF0000">' . $lang['Paymoney_Payok'] . '</font><br>' . $pay_see . $lang['Paymoney_paysee'] . $postrow[$i]['pay_gotmoney'] . $lang['Virtual_Money'] . '</p>';
} else {
$temp_url = append_sid("viewtopic.$phpEx?mode=pay_money&" . POST_POST_URL . "=" . $postrow[$i]['post_id'] . "#" . $postrow[$i]['post_id']);
$message = '<font color="#FF0000">' . $lang['Paymoney_Need'] . $pay_money . $lang['Virtual_Money'] . '</font><br>' . $pay_see . $lang['Paymoney_paysee'] . $postrow[$i]['pay_gotmoney'] . $lang['Virtual_Money'] . ' <BR><form name="pay_money" action='.$temp_url.' method="post">          <input type="submit" name="pay_money" value=" 付錢 " class="mainoption" /></form>';
}
}
} else {
$message = $message;
}
}

// END Pay_Money_MOD



打開 posting.php

收尋
$select_sql = ( !$submit ) ? ", t.topic_title, p.enable_bbcode, p.enable_html, p.enable_smilies, p.enable_sig, p.post_username, pt.post_subject, pt.post_text, pt.bbcode_uid, u.username, u.user_id, u.user_sig" : '';

在 u.user_sig 後面加入\r
, pt.pay_money

也就是改成
$select_sql = ( !$submit ) ? ", t.topic_title, p.enable_bbcode, p.enable_html, p.enable_smilies, p.enable_sig, p.post_username, pt.post_subject, pt.post_text, pt.bbcode_uid, u.username, u.user_id, u.user_sig, pt.pay_money" : '';



收尋
$message = $post_info['post_text'];

後面加入\r
$pay_money = $post_info['pay_money'];


收尋
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length);

在 $poll_length 後下加入\r
, $pay_money

也就是改成
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length, $pay_money);


收尋
$message = '[quote="' . $quote_username . '"]' . $message . '[/quote]';

後面加上
// Pay_Money_MOD By KCTONY
if ($pay_money != 0) $message = '[quote="' . $quote_username . '"]' . $lang['Paymoney_Cantquote']. '[/quote]';
// END Pay_Money_MOD


尋找\r
//
// HTML toggle selection
//
if ( $board_config['allow_html'] )
{
$html_status = $lang['HTML_is_ON'];
$template->assign_block_vars('switch_html_checkbox', array());
}
else
{
$html_status = $lang['HTML_is_OFF'];
}
在前面加入\r

//
// Pat_Money_Mod By KCTONY
//
if ( $board_config['allow_paymoney'] )
{
$paymoney_status = $lang['Paymoney_is_ON'];\r
$template->assign_block_vars('switch_paymoney_text', array());
}
else
{
$paymoney_status = $lang['Paymoney_is_OFF'];
}



尋找\r
'SMILIES_STATUS' => $smilies_status,

在後面加入\r
'PAYMONEY_STATUS' => $paymoney_status, // Pay_Money_MOD By KCTONY
'L_SET_MONEY' => $lang['paymoney_set_money'], // Pay_Money_MOD
'VALUE_PAY_MONEY' => $pay_money + 0, // Pay_Money_MOD
'VIRTUAL_MONEY' => $lang['Virtual_Money'], // Pay_Money_MOD



打開 templates/subSilver/posting_body.tpl

尋找\r
{HTML_STATUS}<br />
在前面加入\r
{PAYMONEY_STATUS}<br />


尋找\r
<!-- BEGIN switch_html_checkbox -->
<tr>
<td>
<input type="checkbox" name="disable_html" {S_HTML_CHECKED} />
</td>
<td><span class="gen">{L_DISABLE_HTML}</span></td>
</tr>
<!-- END switch_html_checkbox -->

在前面加入\r

<!-- BEGIN switch_paymoney_text -->
<tr>
<td></td>
<td>
<span class="gen">{L_SET_MONEY}</span><input type="text" name="pay_money" size="10" value="{VALUE_PAY_MONEY}" /><span class="gen">{VIRTUAL_MONEY}</span>
</td>
</tr>
<!-- END switch_paymoney_text -->



打開 includes/functions_post.php

收尋
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, &$post_username, &$post_subject, &$post_message, &$poll_title, &$poll_options, &$poll_length)

在 &$poll_length 後面加上
, &$pay_money

也就是改成
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, &$post_username, &$post_subject, &$post_message, &$poll_title, &$poll_options, &$poll_length, &$pay_money)


收尋 (要改三個部分,要注意.)

$sql = ( $mode != 'editpost' ) ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message', bbcode_uid = '$bbcode_uid', post_subject = '$post_subject' WHERE post_id = $post_id";

在 post_id, post_subject, bbcode_uid, post_text 後面加上
, pay_money, pay_user

在 $post_id, '$post_subject', '$bbcode_uid', '$post_message' 後面加上
, '$pay_money' ,'id".$userdata['user_id'].",'

在 , post_subject = '$post_subject' 後面加上
, pay_money = '$pay_money'

也就是改成
$sql = ( $mode != 'editpost' ) ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text, pay_money, pay_user) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message', '$pay_money' ,'id".$userdata['user_id'].",')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message', bbcode_uid = '$bbcode_uid', post_subject = '$post_subject', pay_money = '$pay_money' WHERE post_id = $post_id";




打開 includes/topic_review.php

收尋
$sql = "SELECT u.username, u.user_id, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid

後面加上
, pt.pay_money, pt.pay_user

也就是改成
$sql = "SELECT u.username, u.user_id, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid, pt.pay_money, pt.pay_user


收尋
$template->assign_block_vars('postrow', array(

在前面加入\r
// Pay_Money_MOD By KCTONY
$pay_user = $row['pay_user'];
$user_id = 'id' . $userdata['user_id'] . ',';;
$poster_id = $row['poster_id'];

if ($row['pay_money'] > 0)
{
If ($poster_id <> $userdata['user_id'])
{
if (stristr($pay_user,$user_id)) {
$message = $message . '<p>----------<br><font color="#FF0000">' . $lang['Paymoney_Payok'] . '</font></p>';
} else {
$message = '<p><font color="#FF0000">' . $lang['Paymoney_Cantrew']. '</font></p>';
$showatt = 'no';
}
}
}
// END Pay_Money_MOD



打開 admin/admin_board.php

收尋
$html_yes = ( $new['allow_html'] ) ? "checked="checked"" : "";
$html_no = ( !$new['allow_html'] ) ? "checked="checked"" : "";

前面加入\r
$paymoney_yes = ( $new['allow_paymoney'] ) ? "checked="checked"" : "";
$paymoney_no = ( !$new['allow_paymoney'] ) ? "checked="checked"" : "";


收尋
"L_ALLOW_HTML" => $lang['Allow_HTML'],

前面加入\r
"L_ALLOW_PAYMONEY" => $lang['Allow_Paymoney'], // Pay_Money_MOD By KCTONY
"PAYMONEY_YES" => $paymoney_yes, // Pay_Money_MOD
"PAYMONEY_NO" => $paymoney_no, // Pay_Money_MOD



打開 templates/subSilver/admin/board_config_body.tpl

收尋
<tr>
<td class="row1">{L_ALLOW_HTML}</td>
<td class="row2"><input type="radio" name="allow_html" value="1" {HTML_YES} /> {L_YES}  <input type="radio" name="allow_html" value="0" {HTML_NO} /> {L_NO}</td>
</tr>
前面加入\r
<tr>
<td class="row1">{L_ALLOW_PAYMONEY}</td>
<td class="row2"><input type="radio" name="allow_paymoney" value="1" {PAYMONEY_YES} /> {L_YES}  <input type="radio" name="allow_paymoney" value="0" {PAYMONEY_NO} /> {L_NO}</td>
</tr>



打開 search.php

收尋
if ( $show_results == 'posts' )
{
$sql = "SELECT pt.post_text, pt.bbcode_uid, pt.post_subject, p.*, f.forum_id, f.forum_name, t.*, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid

在 u.user_sig_bbcode_uid 後面加入
, pt.pay_money, pt.pay_user

也就是改成
$sql = "SELECT pt.post_text, pt.bbcode_uid, pt.post_subject, p.*, f.forum_id, f.forum_name, t.*, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid, pt.pay_money, pt.pay_user



尋找\r
$message = $searchset[$i]['post_text'];

替換成
// Pay_Money_MOD By KCTONY
$pay_user = $searchset[$i]['pay_user'];
$user_id = 'id' . $userdata['user_id'] . ',';;
$poster_id = $searchset[$i]['poster_id'];

if ($searchset[$i]['pay_money'] > 0)
{
If ($poster_id == $userdata['user_id'])
{
$message = $searchset[$i]['post_text'];
} else {
if (stristr($pay_user,$user_id)) {
$message = $message . '<p>----------<br><font color="#FF0000">' . $lang['Paymoney_Payok'] . '</font></p>';
} else {
$message = '<p><font color="#FF0000">' . $lang['Paymoney_Cantrew']. '</font></p>';
}
}
} else {
$message = $searchset[$i]['post_text'];
}
// END Pay_Money_MOD





===========================================================
如果有裝 "友善列印" 的外掛的話\r

打開 printview.php

尋找\r
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid

在 pt.bbcode_uid 後面加上
, pt.pay_money ,pt.pay_user

也就是變成
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid, pt.pay_money ,pt.pay_user



尋找\r
$message = $postrow[$i]['post_text'];

替換成


// Pay_Money_MOD By KCTONY
$pay_user = $postrow[$i]['pay_user'];
$user_id = 'id' . $userdata['user_id'] . ',';;
$poster_id = $postrow[$i]['poster_id'];

if ($postrow[$i]['pay_money'] > 0)
{
If ($poster_id == $userdata['user_id'])
{
$message = $postrow[$i]['post_text'];
} else {
if (stristr($pay_user,$user_id)) {
$message = $postrow[$i]['post_text'];
} else {
$message = $lang['Paymoney_Cantrew'];
}
}
} else {
$message = $postrow[$i]['post_text'];
}
// END Pay_Money_MOD



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

如果有裝attach file mod的使用者作下面的修改
就可以把attach file mod的部分也隱藏起來了

本來打算從attach file mod的程式去修改
可是版本不同 差異不小 所以做個最簡單的方法

打開 viewtopic.php
尋找\r



if (stristr($pay_user,$user_id)) {
$message = $message . '<p>----------<br><font color="#FF0000">' . $lang['Paymoney_Payok'] . '</font><br>' . $pay_see . $lang['Paymoney_paysee'] . $postrow[$i]['pay_gotmoney'] . $lang['Virtual_Money'] . '</p>';
} else {



在後面加入

$showatt = 'no';


尋找 (這部分音版本不同也會有差異,就是在裝attach file mod時,viewtopic.php最後修改的部分.)


display_post_attachments($postrow[$i]['post_id'], $postrow[$i]['post_attachment']);


改成
if ($showatt <> 'no')
{
display_post_attachments($postrow[$i]['post_id'], $postrow[$i]['post_attachment']);
}


打開 includes\topic_review.php

尋找\r

$message = '<p><font color="#FF0000">' . $lang['Paymoney_Cantrew']. '</font></p>';


後面加入\r

$showatt = 'no';



尋找 (這部分音版本不同也會有差異,就是在裝attach file mod時,topic_review.php最後修改的部分.)

display_review_attachments($row['post_id'], $row['post_attachment'], $is_auth);


修改成


if ($showatt <> 'no')
{
display_review_attachments($row['post_id'], $row['post_attachment'], $is_auth);
}


這樣就可以了



---------------------------------------------------------------------------------------------------

有人提到有使用者會漫天開價的問題
將他改成選單式 應該就不會有這個問題了 ^^
看看要用哪種方式,裝完後在做下列修改:

打開posting.php
尋找\r
[code]//
// Output the data to the template
//
$template->assign_vars(array([/code]

在前面加入\r
[code] for ($i=0;$i<=300;$i+=50)
{
if ($pay_money == $i )
{
$checked = 'selected';
} else {
$checked = '';
}

$select_pay_money .= '<option ' . $checked . ' value="'.$i.'">'.$i.'</option>';
}[/code]

[color=red]for ($i=0;$i<=300;$i+=50)
這段的意思是指 起始是0 每次加50 加到300為止
可以自行更改[/color]


尋找\r
[code] 'VALUE_PAY_MONEY' => $pay_money + 0, // Pay_Money_MOD[/code]

改成
[code] 'VALUE_PAY_MONEY' => $select_pay_money, // Pay_Money_MOD[/code]



打開 templates/subSilver/posting_body.tpl

尋找\r
[code]<input type="text" name="pay_money" size="10" value="{VALUE_PAY_MONEY}" />[/code]

改成
[code]<select size="1" name="pay_money">{VALUE_PAY_MONEY}</select>[/code]


=結束囉=
主題已鎖定

回到「非官方認證外掛」