[插件交流] 輕鬆完成限制重複發帖 For Discuz! All Version

標題是參考來的

這個功能其實以前我用ASP寫討論區的時候 有用到
剛剛看到這個主題 忽然想起來
一直以來 網路上發佈的這類型插件
都是使用數據庫查詢 我是覺得這種方式 雖然比較準確
但是也會對伺服器造成小小的負擔
使用以下方式 可以輕鬆完成而且也不會增加查詢


演示 http://discuz.bluelovers.net/forum-58.html
到此區註冊後 發帖測試即可

開啟 include\newthread.inc.php

if($subject == '' || $message == '') {
                showmessage('post_sm_isnull');
        }[/php]底下加上[php]        if(($_DCOOKIE['lastpostsubject'] && $_DCOOKIE['lastpostsubject'] == md5($subject)) || ($_DCOOKIE['lastpostmessage'] && $_DCOOKIE['lastpostmessage'] == md5($message))) {
                showmessage('post_error_reposted');
        }[/php]找[php]        if($forum['threadtypes']['expiration'][$typeid] && !$typeexpiration) {
                showmessage('threadtype_expiration_invalid');
        }[/php]底下加上[php]        dsetcookie('lastpostsubject', md5($subject), 1800);
        dsetcookie('lastpostmessage', md5($message), 1800);[/php]開啟 templates\default\messages.lang.php

找[php]'post_net_price_iszero' => '您的主題售價扣除積分交易稅後為 0,請返回修改。',[/php]底下加上[php]'post_error_reposted' => '對不起,您發表的主題OR內容與上次發表可能相同,請勿重複發佈!',
完成
複製這篇網址分享給朋友: http://discuz.bluelovers.net/thread-4234-1.html#pid6465

本篇的內容不含引用除另有聲明外,如符合 CC授權條款 則套用 姓名標示-非商業性-相同方式分享 3.0 通用版

套一句黃小琥說過的話:「你可以點歌,但是我可以選歌」

限制重複發帖 For Discuz! All Version

http://www.alan888.com/Discuz/thread-128451-1-1.html

名稱:限制重複發帖 For Discuz! All Version
安裝難度:極易
適用版本:Discuz!所有版本
作者:KaijuanStudio
安裝步驟:

核心修改
打開 include\newthread.inc.php
查找:
        if($subject == '' || $message == '') {
                showmessage('post_sm_isnull');
        }
在後面一行添加:
//Refuse repeated post. Code by KaijuanStudio
        if($repeated == 1) {
                $query = $db->query("SELECT tid, subject FROM {$tablepre}threads WHERE authorid='$discuz_uid' AND subject='$subject'");
                if($db->num_rows($query)) {
                        $repeat = $db->fetch_array($query);
                        showmessage('post_repeated', 'index.php');
                }
        } elseif ($repeated == 2) {
                $query = $db->query("SELECT tid, subject FROM {$tablepre}threads WHERE subject='$subject'");
                if($db->num_rows($query)) {
                        $repeat = $db->fetch_array($query);
                        showmessage('post_repeated', 'index.php');
                }
        } elseif ($repeated == 3) {
                $query = $db->query("SELECT tid, authorid, subject, message FROM {$tablepre}posts WHERE first='1' AND subject='$subject'");
                if($db->num_rows($query)) {
                        $repeat = $db->fetch_array($query);
                        if($repeat['authorid'] == $discuz_uid) {
                                showmessage('post_repeated', 'index.php');
                        }

                        function SubString($str, $start, $len = 0xFFFFFFFF) {
                                if($start < 0) {
                                        $start = strlen($str) + $start;
                                }
                                if($len < 0) {
                                        $len = strlen($str) - $start + $len;
                                }
                                $tmp = '';
                                $result = '';
                                $strlen = strlen($str);
                                $begin = 0;
                                $subLen = 0;
                                for($i = 0; $i < $start + $len && $i < $strlen; $i++) {
                                        if($i < $start) {
                                                if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1]) >= 161 && ord($str[$i+1]) <= 254) $i++;
                                        } else {
                                                $begin=$i;
                                                for(; $i<$start+$len && $i<$strlen; $i++) {
                                                        if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1])>=161 && ord($str[$i+1])<=254) $i++;
                                                }
                                                return substr($str,$begin,$i-$begin);
                                        }
                                }
                        }

                        if(strlen($message) > 60) {
                                if(SubString($message, -100) == SubString($repeat['message'], -100) || SubString($message, 50, 100) == SubString($repeat['message'], 50, 100)) {
                                        showmessage('post_repeated', 'index.php');
                                }
                        } else {
                                if($message == SubString($repeat['message'], 0, 60)) {
                                        showmessage('post_repeated', 'index.php');
                                }
                        }
                }
        }
//Refuse repeated post. Code End
添加提示信息

    * 打開:templates\default\messages.lang.php
    * 查找:
'post_net_price_iszero' => '您的主題售價扣除積分交易稅後為 0,請返回修改。',
在後面一行添加:
'post_repeated' => '您所發佈的主題已存在:《<a href=\"viewthread.php?tid=$repeat[tid]\" target=\"_blank\">$repeat[subject]</a>》請勿重複發佈。',
添加設置

    * 打開:config.inc.php
    * 在最後添加一段:
$repeated = 0;        //設置防範重複發帖的級別,0=關閉,1=防範相同ID發佈相同禁題的新主題,2=防範發佈相同標題的新主題,3=防範發佈相同標題且內容部分相同的新主題。
您可根據自己的需要,隨時更改 $repeated 的數值,以關閉或開啟限制重複發貼不同的防範級別完成!
上傳更新修改的三個文件。
複製這篇網址分享給朋友: http://discuz.bluelovers.net/thread-4234-1.html#pid6476

本篇的內容不含引用除另有聲明外,如符合 CC授權條款 則套用 姓名標示-非商業性-相同方式分享 3.0 通用版

TOP

RE: [插件交流] 輕鬆完成限制重複發帖 For Discuz! All Version

有無重復回帖嘅設置?
複製這篇網址分享給朋友: http://discuz.bluelovers.net/thread-4234-1.html#pid19281

本篇的內容不含引用除另有聲明外,如符合 CC授權條款 則套用 姓名標示-非商業性-相同方式分享 3.0 通用版

TOP