织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现“创业方向”这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法:

我们找到并打开/include/arc.archives.class.php文件,在里面找到如下代码:

01 function ReplaceKeyword($kw,&$body)
02     {
03         global $cfg_cmspath;
04         $maxkey = 5;
05         $kws = explode(",",trim($kw));    //以分好为间隔符
06         $i=0;
07         $karr = $kaarr = $GLOBALS['replaced'] = array();
08  
09         //暂时屏蔽超链接
10         $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU"'\\1-]-\\4-[-\\6', $body);
11  
12         /*
13         foreach($kws as $k)
14         {
15             $k = trim($k);
16             if($k!="")
17             {
18                 if($i > $maxkey)
19                 {
20                     break;
21                 }
22                 $myrow = $this->dsql->GetOne("SELECT * FROM #【分隔符】@__keywords WHERE keyword='$k' AND rpurl<>'' ");
23                 if(is_array($myrow))
24                 {
25                     $karr[] = $k;
26                     $GLOBALS['replaced'][$k] = 0;
27                     $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
28                 }
29                 $i++;
30             }
31         }
32         */
33         $query = "SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' ORDER BY rank DESC";
34         $this->dsql->SetQuery($query);
35         $this->dsql->Execute();
36         while($row = $this->dsql->GetArray())
37         {
38             $key = trim($row['keyword']);
39             $key_url=trim($row['rpurl']);
40             $karr[] = $key;
41             $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
42         }
43  
44         // 这里可能会有错误
45         $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe","_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
46  
47         //恢复超链接
48         $body = preg_replace("#(<a(.*))-\]-(.*)-\[-(\/a>)#isU",'\\1>\\3<\\4', $body);
49         return $body;
50     }

注意查找代码的时候先手动去掉代码里面的【分隔符】字样!

找到后将其替换为如下代码:

01     function ReplaceKeyword($kw,&$body)
02     {
03     global $cfg_cmspath,$dsql;
04     $maxkey = 5;
05     $kws = explode(",",trim($kw)); //以分好为间隔符
06     $i=0;
07     $karr = $kaarr = $GLOBALS['replaced'] = array();
08     //暂时屏蔽超链接
09     $body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU"'\\1-]-\\4-[-\\6', $body);
10     $query="SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' and sta=1 ORDER BY length(keyword)desc";
11     $dsql->SetQuery($query);
12     $dsql->Execute();
13     while($row = $dsql->GetArray())
14     {
15     $key = trim($row['keyword']);
16     $key_url=trim($row['rpurl']);
17     $karr[] = $key;
18     $kaarr[] = "<u><a href='$key_url' target='_blank'>$key</a></u>";
19     }
20     foreach ($karr as $key => $word)
21     {
22     $body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr[$key], \$kaarr[$key],
23  
24  
25 '\\1')", $body);
26     //echo $body."<br/>";
27     //恢复超链接
28     $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU"'\\1>\\3<\\4', $body);//暂时屏蔽超链接
29     $body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU"'\\1-]-\\4-[-\\6', $body);
30     }
31     //恢复超链接
32     $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU"'\\1>\\3<\\4', $body);
33  
34  
35     return $body;
36     }
37     }
38     //End Archives
39     //高亮专用, 替换多次是可能不能达到最多次
40     function _highlight($string, $words, $result, $pre)
41     {
42     global $cfg_replace_num;
43     $string = str_replace('\"''"', $string);
44 if($GLOBALS['replaced'][$words] == 1){
45     return $pre.$string;
46     }
47 if($cfg_replace_num > 0){
48     $string = preg_replace("/".preg_quote($words)."/", $result, $string, $cfg_replace_num);
49     if(strpos($string, $words) !== false)
50     {
51         $GLOBALS['replaced'][$words] = 1;
52         }
53         }
54 else{$string = str_replace($words, $result, $string);
55 }
56 return $pre.$string;
57 }

注意手动去掉代码里面的【分隔符】字样!

替换完成后保存即可,然后生成一下文章内容试试。


AiteCms,企业模板快速建站专家,点击了解更多

 

转载自织梦模板教程(www.dede58.com

dedecms关键词维护里面字数多的词优先字数少的词的解决办法的更多相关文章

  1. dedecms织梦首页被篡改 网站被黑被跳转的解决办法建议

    2018年的中秋节即将来临,我们Sine安全公司,最近接到很多用dedecms程序的企业公司网站客户的反馈,说是公司网站经常被篡改,包括网站首页的标题内容以及描述内容,都被改成了什么北京赛车,北京PK ...

  2. paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.

    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库. mmseg默认词库只能是文件格式...不好维护..要是不个词库放的个数据库里面走好维护兰.. 要实现2个目标..: 1 ...

  3. dedecms 后台发布后的文章不能编辑出现一片空白的解决办法

    dede后台无法写新文章也无法编辑以前的文档,文章编辑的地方无法写入,出现无法显示该页面的问题,这是怎么回事?我的dede在ftp中换过文件夹,是不是跟这个有关?该如何解决这个问题? 以下修改是针对d ...

  4. paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.

    paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

  5. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...

  6. Forth 采用Create,Does>定义新的词(word)& 延迟词技术

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. dedecms添加文章时提示标题为空,编辑文章时编辑器空白的解决办法

    dedecms添加文章时提示标题为空,编辑文章时编辑器空白的解决办法 dedecms出现这个问题与代码无关,主要是和PHP的版本有关,用的PHP5.4,更换成PHP5.2之后就不会有这个问题了. 问题 ...

  8. dedecms问答模块时间显示1970-01-01的解决办法

    在使用dedecms的问答模块的时候,很多人希望能在模板上加上问题的时间,一般我们采用这样的dede标签: {dede:ask row=24 titlelen='50' sort='ok'}   &l ...

  9. Linux系统环境下安装dedecms(织梦)提示http500错误的解决办法

    碰到一客户安装DEDE提示http500错误,问题已得到完美解决,下面我分享下 这个解决办法,希望有帮助. 故障状态:正常安装dedecms v5.7 gbk提示http500错误Dede安装环境:一 ...

随机推荐

  1. Qt5.7新特性

    简述 Qt5.7发布了,新特性如下. 简述 新特性 C11 Support Required from the compiler New Features within existing module ...

  2. Qt之OpenSSL

    简述 OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 简述 下载安装 使用 更多参考 下载安装 ...

  3. 如何检查 Android 应用的内存使用情况

    Android是为移动设备而设计的,所以应该关注应用的内存使用情况.尽管Android的Dalvik虚拟机会定期执行垃圾回收操作,但这也不意味着就可以忽视应用在何时何处进行内存分配和释放.为了提供良好 ...

  4. max带来的冲突

    题目要求: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:sum123.cpp * 作 者:林海云 * 完毕日期:20 ...

  5. node06---npm、silly-datetime、路径问题

    我们刚才学习了,模块就是一些功能的封装,所以一些成熟的.经常使用的功能,都有人封装成为了模块.并且放到了社区中,供人免费下载. 这个伟大的社区,叫做npm. 也是一个工具名字 node package ...

  6. 递归神经网络——就是解决AST这样的问题

    原文:https://zybuluo.com/hanbingtao/note/626300 有时候把句子看做是词的序列是不够的,比如下面这句话『两个外语学院的学生』: 上图显示了这句话的两个不同的语法 ...

  7. 制作 Gif 工具

    ScreenToGif:非常小,非常强大: 从此可以十分方便地从视频中抠 gif 出来了: 以及制作一些教学类小 gif,插入到网页中: 丰富的编辑功能: 插入文本,插入标题,插入图像等: 下载地址: ...

  8. rest_framework-序列化-总结完结篇

    #rest_framework 序列化 from rest_framework import serializers #serilizers.Serializer serializers.ModelS ...

  9. Word histogram

    Here is a program that reads a file and builds a histogram of the words in the file: process_file lo ...

  10. CUDA学习笔记(四)

    昨天一直在写ben的作业.总结一下周一的cuda情况. cuda程序需要用到一些设置的参数,如argv[],另外cuda读入文件特别苛刻,只能采用C的方式,而且对w+,r的使用只有试通才行. 卧底天外 ...