用dedecms做文章类网站,一直有个让人头痛的问题:就是添加文章很容易添加到重复的,也就是之前添加过了,等过了一段时间又添加一篇,加文章大多数是从不同的网站复制添加的,所以很容易所到这个问题,就拿织梦58来说近200个栏目、几万的文章数据,添加重复的机率更大了,为角解决dedecms添加文章时重复内容,于是就有了以下内容
不得不说下dedecms自带的检测标题是否重复基本上毫无用处,“提示:系统已经存在标题为 'xxx' 的文档”,该提示只会在标题文本100%匹配的情况下才会出现,现在收集的文章多数都是内容相同标题却是伪原创了的,所以说根本匹配不了,下面就介绍下织梦58实现的方法吧,不算很好将就能用
第一步:加载jQuery文件
打开/dede/article_add.htm在<head>后面添加jQuery库
1 <script type="text/javascript" src="/images/js/j.js"></script>
这个jQuery库是1.2的,很老的版本了,你可以直接去官网下载较新的版本
第二步:添加一些div和js
在第二个</form>的前面添加
1 <span id="checkArcRepeatedTips"></span> 2 <div style="margin:10px;"><label for="checkArcRepeated"><input type="checkbox" id="checkArcRepeated" checked="checked" />检测内容是否有重复</label></div> 3 <input name="imageField" id="imageFieldBtn" type="image" src="images/button_save.gif" width="60" height="22" class="np" border="0" style="cursor:pointer; display:none;"/> 4 <input type="button" value="保存" id="checkArcRepeatedBtn" style=" width:150px; height:; line-height:30px; background:green; font-size:14px; font-weight:bold; color:#fff; padding:10px; cursor:pointer;" /> 01 <script type="text/javascript"> 02 $(function(){ 03 $('#checkArcRepeatedBtn').click(function(){ 04 if($('#title').val() == ''){ 05 alert('标题不能为空'); 06 return false; 07 } 08 if($('#typeid').val() == '' || $('#typeid').val() == 0){ 09 alert('请选择栏目'); 10 return false; 11 } 12 if($('#checkArcRepeated').attr('checked') != ''){ 13 var range = ue.selection.getRange(); 14 range.select(); 15 var checkWord = ue.selection.getText(); 16 if(!checkWord){ 17 alert('请随机选择一段文本进行文章重复检测'); 18 isRepeat = true; 19 return false; 20 }else{ 21 $.ajax({ 22 type: 'get', 23 url: 'checkArcRepeated.php?checkWord='+checkWord, 24 async: false, 25 beforeSend: function(){ 26 $('#checkArcRepeatedTips').text('请稍候...'); 27 }, 28 success: function(data){ 29 if(data == 'ok'){ 30 //ue.execCommand("insertHtml",checkWord+qmtx3Node) 31 $('#checkArcRepeated').removeAttr('checked'); 32 $('#checkArcRepeatedTips').html(w); 33 //$('#imageFieldBtn').trigger('click'); 34 isRepeat = false; 35 }else{ 36 isRepeat = true; 37 $('#checkArcRepeatedTips').html(data); 38 } 39 40 } 41 }); 42 } 43 if(isRepeat == false){ 44 $('#imageFieldBtn').trigger('click') 45 } 46 return false; 47 }else{ 48 $('#imageFieldBtn').trigger('click'); 49 } 50 }); 51 52 }); 53 </script>
第三步:删除多于的代码
删除
1 <input name="imageField" type="image" src="images/button_save.gif" width="60" height="22" class="np" border="0" style="cursor:pointer;"/>
Tips:有以上代码有两处
删除
01 if(document.form1.title.value=='') 02 { 03 alert('文章标题不能为空!'); 04 return false; 05 } 06 if(document.form1.typeid.value==0) 07 { 08 alert('请选择档案的主类别!'); 09 return false; 10 }
第四步:新建php文件
在/dede/目录新建一个php文件,命名为checkArcRepeated.php,复制粘贴以下代码保存
01 <?php 02 /** 03 * 检测重复文档 04 * 05 * @version 2013-6-5 Aniu QQ:2655101040 $ 06 * @link http://www.dede58.com 07 */ 08 require_once(dirname(__FILE__)."/config.php"); 09 $checkWord = $_GET['checkWord']; 10 $aid = $_GET['aid']; 11 if(empty($checkWord) || $cfg_check_title=='N'){ 12 echo '检测功能未开启或者所选文本为空,请联系'; 13 exit; 14 } 15 $where = ' and main.arcrank>-1 and main.id=addon.aid'; 16 if(!empty($aid)){ 17 $where .= ' and aid <>'.$aid; 18 } 19 $sql = "SELECT aid FROM dede_addonarticle addon, dede_archives main WHERE body LIKE '%".$checkWord."%'".$where; 20 $row = $dsql->GetOne($sql); 21 if(is_array($row)){ 22 echo '<a style="color:red;" href="article_edit.php?aid='.$row['aid'].'" target="_blank">编辑文章</a> <a style="color:red;" href="../plus/view.php?aid='.$row['aid'].'" target="_blank">前台预览</a>'; 23 }else{ 24 echo 'ok'; 25 }
使用方法:在添加文章时,随机选择文章内容,选择时注意不要选择有格式的文字,比如加粗、字体大小颜色什么的,反正选择纯文本就好,然后点击保存按钮,这里程序会根据你所选择的内容查找之前添加过的文章有没有包含该段文字的,如果有的话会提示重复,你可以预览或者编辑该重复文章,如果没有重复程序会自动提交并保存文章
到这里dedecms避免添加重复文章的工具就差不多了,有两点需要说下,该工具获取编辑器内选中的文本是以百度编辑器API为基础的,如果你的dedecms没有整合百度编辑器,你可以查看之前织梦58写的:dedecms整合百度编辑器(Ueditor)一(基本整合)非要用dedecm自带的编辑器应该也是可以的,你可以去官网查看API
最后来一张图吧