Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz!防止发布重复标题或重复内容的方法

[复制链接]
kaixin52 发表于 2009-7-18 06:58:17 | 显示全部楼层 |阅读模式
本帖最后由 kaixin52 于 2009-7-19 02:59 编辑

在采集大量的内容之后,往往有采到很多和以前很多相同标题或相同内容的帖子,为了避免发布重复的帖子,我们可以手动修改一下Discuz!的源代码来实现:

1、打开 include\newthread.inc.php
2、查找:
    1. if($subject == '' || $message == '') {

    2. showmessage('post_sm_isnull');}
    复制代码
    3、在后面一行添加:
    1.   
    2. //Refuse repeated post. Code by KaijuanStudio , Optimization by phytist
    3. $repeated = 4; //设置防范重复发贴的级别,0=关闭,1=防范相同ID发布相同标题的新主题,2=防范发布相同标题的新主题,3=防范发布相同标题且内容部分相同的新主题,4=防止内容一致或标题和部分内容相同的主题。

    4. if($repeated == 1) {
    5. $query = $db->query("SELECT tid, subject FROM {$tablepre}threads WHERE authorid='$discuz_uid' AND subject='$subject'");
    6. if($db->num_rows($query)) {
    7. $repeat = $db->fetch_array($query);
    8. showmessage('post_repeated', 'index.php');
    9. }
    10. } elseif ($repeated == 2) {
    11. $query = $db->query("SELECT tid, subject FROM {$tablepre}threads WHERE subject='$subject'");
    12. if($db->num_rows($query)) {
    13. $repeat = $db->fetch_array($query);
    14. showmessage('post_repeated', 'index.php');
    15. }
    16. } elseif ($repeated == 3) {
    17. $query = $db->query("SELECT tid, authorid, subject, message FROM {$tablepre}posts WHERE first='1' AND subject='$subject'");
    18. if($db->num_rows($query)) {
    19. $repeat = $db->fetch_array($query);
    20. if($repeat['authorid'] == $discuz_uid) {
    21. showmessage('post_repeated', 'index.php');
    22. }
    23. function SubString($str, $start, $len = 0xFFFFFFFF) {
    24. if($start < 0) {
    25. $start = strlen($str) + $start;
    26. }
    27. if($len < 0) {
    28. $len = strlen($str) - $start + $len;
    29. }
    30. $tmp = '';
    31. $result = '';
    32. $strlen = strlen($str);
    33. $begin = 0;
    34. $subLen = 0;
    35. for($i = 0; $i < $start + $len && $i < $strlen; $i++) {
    36. if($i < $start) {
    37. if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1]) >= 161 && ord($str[$i+1]) <= 254) $i++;
    38. } else {
    39. $begin=$i;
    40. for(; $i<$start+$len && $i<$strlen; $i++) {
    41. if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1])>=161 && ord($str[$i+1])<=254) $i++;
    42. }
    43. return substr($str,$begin,$i-$begin);
    44. }
    45. }
    46. }

    47. if(strlen($message) > 60) {
    48. if(SubString($message, -100) == SubString($repeat['message'], -100) || SubString($message, 50, 100) == SubString($repeat['message'], 50, 100)) {
    49. showmessage('post_repeated', 'index.php');
    50. }
    51. } else {
    52. if($message == SubString($repeat['message'], 0, 60)) {
    53. showmessage('post_repeated', 'index.php');
    54. }
    55. }
    56. }
    57. }elseif ($repeated == 4) {
    58. $query = $db->query("SELECT tid, authorid, subject, message FROM {$tablepre}posts WHERE first='1' AND (subject='$subject' OR message='$message')");
    59. if($db->num_rows($query)) {
    60. $repeat = $db->fetch_array($query);
    61. if($repeat['authorid'] == $discuz_uid) {
    62. showmessage('post_repeated', 'index.php');
    63. }
    64. function SubString($str, $start, $len = 0xFFFFFFFF) {
    65. if($start < 0) {
    66. $start = strlen($str) + $start;
    67. }
    68. if($len < 0) {
    69. $len = strlen($str) - $start + $len;
    70. }
    71. $tmp = '';
    72. $result = '';
    73. $strlen = strlen($str);
    74. $begin = 0;
    75. $subLen = 0;
    76. for($i = 0; $i < $start + $len && $i < $strlen; $i++) {
    77. if($i < $start) {
    78. if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1]) >= 161 && ord($str[$i+1]) <= 254) $i++;
    79. } else {
    80. $begin=$i;
    81. for(; $i<$start+$len && $i<$strlen; $i++) {
    82. if(ord($str[$i]) >= 161 && ord($str[$i]) <= 247 && ord($str[$i+1])>=161 && ord($str[$i+1])<=254) $i++;
    83. }
    84. return substr($str,$begin,$i-$begin);
    85. }
    86. }
    87. }

    88. if(strlen($message) > 60) {
    89. if(SubString($message, -100) == SubString($repeat['message'], -100) || SubString($message, 50, 100) == SubString($repeat['message'], 50, 100)) {
    90. showmessage('post_repeated', 'index.php');
    91. }
    92. } else {
    93. if($message == SubString($repeat['message'], 0, 60)) {
    94. showmessage('post_repeated', 'index.php');
    95. }
    96. }
    97. }
    98. }

    99. //Refuse repeated post. Code End
    复制代码
    * 添加提示信息(可选择加与不加,加了后当发重复的帖子的时候会有温馨提示增加用户体验)
    1、打开:templates\default\messages.lang.php
    2、查找:
    1. 'post_net_price_iszero' => '您的主题售价扣除积分交易税后为 0,请返回修改。',
    复制代码

复制代码
3、在后面一行添加
    1.   'post_repeated' => '您所发布的主题或内容已存在:《<a href="viewthread.php?tid=$repeat[tid]" target="_blank">$repeat[subject]</a>》请勿重复发布。',
    复制代码




不好意思!用中文测试后不行得,只有数字和英文可以!  郁闷
 楼主| kaixin52 发表于 2009-7-18 07:10:45 | 显示全部楼层
本帖最后由 kaixin52 于 2009-7-18 07:18 编辑

我的UTF-8 的
include\newthread.inc.php
  1.         if($subject == '') {
  2.                 showmessage('post_sm_isnull');
复制代码
好像每个人的都不同的,不过跟这段代码差不多的
回复

使用道具 举报

 楼主| kaixin52 发表于 2009-7-18 07:29:38 | 显示全部楼层
回复

使用道具 举报

283465905 发表于 2009-7-18 07:53:55 | 显示全部楼层
支持一下,,
回复

使用道具 举报

gaolou 发表于 2009-7-18 10:08:18 | 显示全部楼层
好东西,收了。
回复

使用道具 举报

51xiangxun 发表于 2009-7-18 11:01:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

minnurse 发表于 2009-7-18 11:05:35 | 显示全部楼层
很强大!先收下了!是不是每个版本都一样?
回复

使用道具 举报

yuanhua123 发表于 2009-7-18 11:06:13 | 显示全部楼层
好东西顶你!
回复

使用道具 举报

鲜橙加冰 发表于 2009-7-31 00:00:26 | 显示全部楼层
www.0596.ws 很想用,支持你
回复

使用道具 举报

cooldgjk 发表于 2009-7-31 19:50:54 | 显示全部楼层
不错,我喜欢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 23:08 , Processed in 0.027006 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表