Dedecms5.3.1原程序的关键词替换,需在文章发表或编辑时在 高级参数>>关键字 处填上关键词,文章内容里的关键词才会替换。对我等懒人来说,希望在发表文章时自动替换文档关键词列表里有的关键词链接。程序嘛,不自动智能就不爽了。
修改方法如下:
修改文件 /include/arc.archives.class.php ,找到这一段:
PHP代码 (展开/隐藏)
- foreach($kws as $k)
- {
- $k = trim($k);
- if($k!="")
- {
- if($i > $maxkey)
- {
- break;
- }
- $myrow = $this->dsql->GetOne("select * from #@__keywords where keyword='$k' And rpurl<>'' ");
- if(is_array($myrow))
- {
- $karr[] = $k;
- $GLOBALS['replaced'][$k] = 0;
- $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
- }
- $i++;
- }
- }
把它替换成:
PHP代码 (展开/隐藏)
- global $dsql;
- $query="SELECT * FROM #@__keywords WHERE rpurl<>'' ORDER BY rank DESC";
- $dsql->SetQuery($query);
- $dsql->Execute();
- while($row = $dsql->GetArray())
- {
- $key = trim($row['keyword']);
- $key_url=trim($row['rpurl']);
- $karr[] = $key;
- $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
- }
友情提示一下:文件的修改请注意备份!
在后台,系统设置里设定一下自动替换的次数就行了。
这里有几个问题:
1、嵌套的关键词替换无法处理。比如,多次替换时:
关键词:中国 中国人
文章内容:我是中国人,我爱中国。
中国人 这个地方会被替换成:
<a href='http://www.chinaren.com'><a href='http://www.china.com'>中国</a>人</a>
或者按关键词出现的先后顺序会把两个 中国 替换掉,而 中国人 则不会被替换。
所以现在只能尽量不设置此类嵌套关键词。好像只有用分词词库搞了。自己功力不够深,希望哪位高手支下招。
2、后台设置替换次数为1次时,关键词会替换1次。
设置为0,就是全部替换时,会替换关键词出现的次数。
但是设置为 2-N 次时,如果文章只有一段,替换正常,就是 2-N 次;但当文章有多个段落且关键词在每个段落都出现时,只会替换关键词在第一段中出现的次数。这是替换算法造成的,暂时也没想到好办法。
相关文章
- 把后台发布文章选择栏目改为下拉菜单的方法(适用dedecms4) (浏览: 11867, 评论: 0)
- DEDECMS自动更新首页HTML的方法 (浏览: 9668, 评论: 0)
- dedecms在任意页面取得某篇文章内容(可按字数)for 5.3.1 (浏览: 9106, 评论: 4)
- dede5.3.1文章页TAG标签的相关问题及解决方法 (浏览: 7562, 评论: 1)
- DedeCMS自定义文件名-用拼音或英文标题作为文章页文件名 (浏览: 6950, 评论: 0)
文章评论(4)
[1楼] [引用] [TOP]
中国石油杂志 发表于 2009, April 13, 8:52 PMdedecms确实无比强大
[3楼] [引用] [TOP]
哈哈哈 发表于 2011, May 6, 2:26 PM先对所有关键词从长到短排序,再对关键词加密,关键词和md5值都保存,循环关键词,匹配文本。在当前关键词的循环环节,匹配关键词,找到后替换为链接加md5,再循环时,比上一个短的关键词就匹配不到长的了,依次类推。比如,中国人,中国两个关键词,数组形式是:[[中国人][md5值]][[中国][md5值]],循环关键词时,肯定是先匹配\"中国人\",找到就用md5值替换文本中\'中国人\',匹配\'中国\'时,已经不存在\"中国人\"这三个字了。等所有关键词循环匹配后,再循环匹配md5值,还原它们。
[4楼] [引用] [TOP]
Copterfly 发表于 2011, May 16, 12:13 PM楼上高人,多谢。学习了。
发表评论



