DedeCMS关键词替换问题较完美解决方案
在DedeCMS V5.7SP1后台"核心→批量维护"下边有个文档关键词维护,它允许添加一些关键词及其对应的链接网址,当发布的文章内容中包含这些关键词时,程序就会给关键词加上文本链接[1],这一功能在做站内锚文本时非常有用:
但其中有个频率选项,一直不太明白是什么意思,经一番测试后发现,频率表示的是关键词的优先级,数值大越大,则优先级越高,这个关键词就优先被查找和替换。比如有A和B两个关键词,A的频率为1,B的频率为2,那么在生成文章页面时,关键词B会优先加上文本链接,然后再是A。
但这有什么用呢?比如关键词A和B,哪个先哪个后对最终生成的页面而言不还是一样么?是的,当两个关键词之间不存在在包含关系时,设置频率是没有意义的,而当两关键词存在包含关系时,频率的意义就体现出来了,比如"木子屋"和"木子"这两个关键词,后者是前者的一部分,这会怎么替换呢?如上图所示,两个关键词的频率一样,所以关键词将按添加的先后顺序进行替换,先替换木子屋,再替换木子,最终页面的代码为:
复制内容到剪贴板 程序代码
<ahref='http://www.mzwu.com/'target='_blank'><u><ahref='http://www.qq.com/'target='_blank'><u>木子</u></a>屋</u></a>
这代码显然有问题,如果想替换掉关键词木子,而不替换木子屋应怎么设置呢?只需设置木子的频率比木子屋的大即可,比如设置木子的频率为2[2],则生成的页面代码为:
复制内容到剪贴板 程序代码
<ahref='http://www.qq.com/'target='_blank'><u>木子</u></a>屋
如果想替换掉关键词木子屋,而不替换木子又应怎么设置呢?抱歉,目前程序无法这样实现,因为所有关键词最终都会搜索一次,所以不管如何设置频率,短的关键词总能被替换,算是一种缺陷吧。
补充说明
[1].关键字替换开关需处于打开状态,生成文章页面时关键词才能被替换,开关位置:系统→系统设置→系统基本参数→核心设置→关键字替换(是/否)使用本功能会影响HTML生成速度。另外,DedeCMS还很人性化的增加了一个参数,它可以设置同一篇文章中同一个关键词替换的次数,参数位置:系统→系统设置→系统基本参数→其它选项→文档内容同一关键词替换次数(0为全部替换),这样的好处是能防止文章中站内锚文本出现次数过多。
[2].DedeCMS V5.7SP1有个bug,关键词添加成功后,可以修改链接网址、禁用和删除关键词,但就是不能修改关键词频率,bug修正方法:
①.打开dede\templets\article_keywords_main.htm,找到如下代码:
复制内容到剪贴板 程序代码
<td>
<inputtype='text' size='5' class='nnpp' value='{dede:field.rank/}'name='rank_{dede:field.aid/}' />
</td>
修改如下:(红色新增)
复制内容到剪贴板 程序代码
<td>
<inputtype='hidden' value='{dede:field.rank/}'name='rankold_{dede:field.aid/}' />
<inputtype='text' size='5' class='nnpp' value='{dede:field.rank/}'name='rank_{dede:field.aid/}' />
</td>
②.打开dede/article_keywords_main.php,找到如下代码:
复制内容到剪贴板 程序代码
//更新链接网址
if($rpurl!=$rpurlold)
{
$query1= "Update `#@__keywords` SET rpurl='$rpurl' Where aid='$aid'";
$dsql->ExecuteNoneQuery($query1);
}
紧接其后加入下边代码:
复制内容到剪贴板 程序代码
//更新频率
$rank = ${'rank_'.$aid};
$rankold = ${'rankold_'.$aid};
if($rank!=$rankold)
{
$query1= "Update `#@__keywords` SET rank='$rank' Where aid='$aid' ";
$dsql->ExecuteNoneQuery($query1);
}
保存后就可以在后台修改关键词频率了