dedecms5.3文章页内容关键词自动替换方法

Dedecms5.3.1原程序的关键词替换,需在文章发表或编辑时在 高级参数>>关键字 处填上关键词,文章内容里的关键词才会替换。对我等懒人来说,希望在发表文章时自动替换文档关键词列表里有的关键词链接。程序嘛,不自动智能就不爽了。

修改方法如下:

修改文件 /include/arc.archives.class.php ,找到这一段: 

PHP代码 (展开/隐藏)
  1. foreach($kws as $k)           
  2. {           
  3.  $k = trim($k);           
  4.  if($k!="")           
  5.  {           
  6.   if($i > $maxkey)           
  7.   {           
  8.    break;           
  9.   }           
  10.   $myrow = $this->dsql->GetOne("select * from #@__keywords where keyword='$k' And rpurl<>'' ");           
  11.   if(is_array($myrow))           
  12.   {           
  13.    $karr[] = $k;           
  14.    $GLOBALS['replaced'][$k] = 0;           
  15.    $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";           
  16.   }           
  17.   $i++;           
  18.  }           
  19. }        

把它替换成: 

PHP代码 (展开/隐藏)
  1. global $dsql;           
  2.         $query="SELECT * FROM #@__keywords WHERE rpurl<>'' ORDER BY rank DESC";           
  3.         $dsql->SetQuery($query);           
  4.         $dsql->Execute();           
  5.         while($row = $dsql->GetArray())           
  6.   {           
  7.    $key = trim($row['keyword']);           
  8.    $key_url=trim($row['rpurl']);           
  9.    $karr[] = $key;           
  10.    $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";           
  11.   }         

友情提示一下:文件的修改请注意备份!

在后台,系统设置里设定一下自动替换的次数就行了。

这里有几个问题:

1、嵌套的关键词替换无法处理。比如,多次替换时:

关键词:中国 中国人

文章内容:我是中国人,我爱中国。

中国人 这个地方会被替换成:

<a href='http://www.chinaren.com'><a href='http://www.china.com'>中国</a>人</a>

或者按关键词出现的先后顺序会把两个 中国 替换掉,而 中国人 则不会被替换。

所以现在只能尽量不设置此类嵌套关键词。好像只有用分词词库搞了。自己功力不够深,希望哪位高手支下招。

2、后台设置替换次数为1次时,关键词会替换1次。

设置为0,就是全部替换时,会替换关键词出现的次数。

但是设置为 2-N 次时,如果文章只有一段,替换正常,就是 2-N 次;但当文章有多个段落且关键词在每个段落都出现时,只会替换关键词在第一段中出现的次数。这是替换算法造成的,暂时也没想到好办法。

 

Trackbacks: 点击获得Trackback地址,Encode: UTF-8  点击获得Trackback地址,Encode: GB2312 or GBK  点击获得Trackback地址,Encode: BIG5
Tags: dedecms | 分类:DedeCms
浏览概况:评论:4 | 相关文章:5 | 阅读:10580
文章评论(4)
[1楼] [引用] [TOP]
中国石油杂志 发表于 2009, April 13, 8:52 PM
dedecms确实无比强大
[2楼] [引用] [TOP]
土豆 发表于 2009, May 1, 1:20 AM
好文章~
[3楼] [引用] [TOP]
哈哈哈 发表于 2011, May 6, 2:26 PM
先对所有关键词从长到短排序,再对关键词加密,关键词和md5值都保存,循环关键词,匹配文本。在当前关键词的循环环节,匹配关键词,找到后替换为链接加md5,再循环时,比上一个短的关键词就匹配不到长的了,依次类推。比如,中国人,中国两个关键词,数组形式是:[[中国人][md5值]][[中国][md5值]],循环关键词时,肯定是先匹配\"中国人\",找到就用md5值替换文本中\'中国人\',匹配\'中国\'时,已经不存在\"中国人\"这三个字了。等所有关键词循环匹配后,再循环匹配md5值,还原它们。
[4楼] [引用] [TOP]
Copterfly 发表于 2011, May 16, 12:13 PM
楼上高人,多谢。学习了。
发表评论
用户名:
密码(游客无需):
网址/E-mail:
      记住我的信息