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

我们找到并打开/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. 对于树的序列化,用了stream,很好

    https://leetcode.com/problems/serialize-and-deserialize-binary-tree/?tab=Description 下面这个解法里面的C++部分很 ...

  2. Unity3d 开发(七)AssetBundle组织文件夹

    本文探讨怎样配置一个AssetBundle更为合理. 对于结构为 的文件夹结构,当中shared是Hero文件夹下须要用到的公用资源.即公有依赖.可採用例如以下的打包策略 整个文件夹打包 将整个100 ...

  3. JavaSript之prototype属性

    近期在JavaSript进行Array操作的时候发现没有删除节点的方法.而我要实现的效果须要不断调用删除节点的方法.查找了相关资料发现能够利用prototype属性给Array添加删除节点的方法.而且 ...

  4. IOS开发的哪些异常之异常断点

    从Android开发的异常报错到IOS的异常闪退,经历了不一样的处理过程.对于IOS的异常报错刚開始总是非常茫然,永远仅仅告诉你有异常.然后就跳到main.m文件,却不曾我告诉她在那出现.真是吊人胃口 ...

  5. QtWebkit里RenderLayer树的绘制具体流程分析

           更新:RenderLayer树的绘制对RenderObject的绘制.同一时候补足绘制阶段的描写叙述.        QtWebkit里,QWebView,QWebPage和QWebFr ...

  6. 重写MPAndroidChart显示标记

    MPAndroidChart是实现图表功能的优秀控件, 能够完毕大多数绘制需求. 对于改动第三方库而言, 优秀的架构是继承开发, 而不是把源代码拆分出去. MP在显示标记控件(MarkView)时, ...

  7. Effective JavaScript Item 34 在prototype上保存方法

    本系列作为EffectiveJavaScript的读书笔记. 不使用prototype进行JavaScript的编码是全然可行的,比如: function User(name, passwordHas ...

  8. angularjs 模块化

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  9. java9新特性-4-模块化系统: Jigsaw与Modularity

    1.官方Feature 200: The Modular JDK 201: Modular Source Code 220: Modular Run-Time Images 260: Encapsul ...

  10. 由于webpack-cli版本问题造成的错误

    The CLI moved into a separate package: webpack-cli Please install 'webpack-cli' in addition to webpa ...