dedecms关键词维护里面字数多的词优先字数少的词的解决教程

站长手记 作者: 2024-08-27 14:25:01
织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现创业方向这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字   织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现“创业方向”这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法: 我们找到并打开/include/arc.archives.class.php文件,在里面找到如下代码:  
  1. function ReplaceKeyword($kw,&$body) 
  2.  
  3.     { 
  4.  
  5.         global $cfg_cmspath; 
  6.  
  7.             $maxkey = 5
  8.  
  9.       $kws = explode(",",trim($kw));    //以分好为间隔符 
  10.  
  11.         $i=0
  12.  
  13.       $karr = $kaarr = $GLOBALS['replaced'] = array(); 
  14.  
  15.    
  16.  
  17.         //暂时屏蔽超链接 
  18.  
  19.         $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body); 
  20.  
  21. /* 
  22.  
  23. foreach($kws as $k) 
  24.  
  25.  
  26.                 $k = trim($k); 
  27.  
  28.                 if($k!="") 
  29.  
  30.                 { 
  31.  
  32.                     if($i > $maxkey) 
  33.  
  34.                     { 
  35.  
  36.                         break; 
  37.  
  38.                     } 
  39.  
  40.                     $myrow = $this->dsql->GetOne("SELECT * FROM #【分隔符】@__keywords WHERE keyword='$k' AND rpurl<>'' "); 
  41.  
  42.                     if(is_array($myrow)) 
  43.  
  44.                     { 
  45.  
  46.                         $karr[] = $k; 
  47.  
  48.                         $GLOBALS['replaced'][$k] = 0; 
  49.  
  50.                         $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>"; 
  51.  
  52.                     } 
  53.  
  54.                     $i++; 
  55.  
  56.                 } 
  57.  
  58.             } 
  59.  
  60.             */ 
  61.  
  62.             $query = "SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' ORDER BY rank DESC"
  63.  
  64.             $this->dsql->SetQuery($query); 
  65.  
  66.             $this->dsql->Execute(); 
  67.  
  68.             while($row = $this->dsql->GetArray()) 
  69.  
  70.             { 
  71.  
  72.                 $key = trim($row['keyword']); 
  73.  
  74.                 $key_url=trim($row['rpurl']); 
  75.  
  76.                 $karr[] = $key; 
  77.  
  78.                 $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>"; 
  79.  
  80.             } 
  81.  
  82.        
  83.  
  84.             // 这里可能会有错误 
  85.  
  86.             $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body); 
  87.  
  88.        
  89.  
  90.             //恢复超链接 
  91.  
  92.             $body = preg_replace("#(<a(.*))-\]-(.*)-\[-(\/a>)#isU", '\\1>\\3<\\4', $body); 
  93.  
  94.             return $body; 
  95.  
  96.         } 
  97.  
  98.   
  注意查找代码的时候先手动去掉代码里面的【分隔符】字样! 找到后将其替换为如下代码:  
  1.  function ReplaceKeyword($kw,&$body) 
  2.  
  3.     { 
  4.  
  5.   global $cfg_cmspath,$dsql; 
  6.  
  7.     $maxkey = 5
  8.  
  9.     $kws = explode(",",trim($kw)); //以分好为间隔符 
  10.  
  11.     $i=0
  12.  
  13.         $karr = $kaarr = $GLOBALS['replaced'] = array(); 
  14.  
  15.         //暂时屏蔽超链接 
  16.  
  17.     $body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $body); 
  18.  
  19.         $query="SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' and sta=1 ORDER BY length(keyword)desc"
  20.  
  21. $dsql->SetQuery($query); 
  22.  
  23. $dsql->Execute(); 
  24.  
  25. while($row = $dsql->GetArray()) 
  26.  
  27.  
  28.         $key = trim($row['keyword']); 
  29.  
  30.         $key_url=trim($row['rpurl']); 
  31.  
  32.         $karr[] = $key; 
  33.  
  34.         $kaarr[] = "<u><a href='$key_url' target='_blank'>$key</a></u>"; 
  35.  
  36.         } 
  37.  
  38.         foreach ($karr as $key => $word) 
  39.  
  40.         { 
  41.  
  42.         $body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr[$key], \$kaarr[$key], 
  43.  
  44.        
  45.  
  46.        
  47.  
  48.     '\\1')", $body); 
  49.  
  50.         //echo $body."<br/>"; 
  51.  
  52.         //恢复超链接 
  53.  
  54.         $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body);//暂时屏蔽超链接 
  55.  
  56.         $body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $body); 
  57.  
  58.         } 
  59.  
  60.         //恢复超链接 
  61.  
  62.         $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body); 
  63.  
  64.        
  65.  
  66.        
  67.  
  68.         return $body; 
  69.  
  70.         } 
  71.  
  72.         } 
  73.  
  74.         //End Archives 
  75.  
  76.         //高亮专用, 替换多次是可能不能达到最多次 
  77.  
  78.         function _highlight($string, $words, $result, $pre) 
  79.  
  80.         { 
  81.  
  82.         global $cfg_replace_num; 
  83.  
  84.         $string = str_replace('\"', '"', $string); 
  85.  
  86.     if($GLOBALS['replaced'][$words] == 1){ 
  87.  
  88.         return $pre.$string; 
  89.  
  90.         } 
  91.  
  92.     if($cfg_replace_num > 0){ 
  93.  
  94.         $string = preg_replace("/".preg_quote($words)."/", $result, $string, $cfg_replace_num); 
  95.  
  96.         if(strpos($string, $words) !== false) 
  97.  
  98.         { 
  99.  
  100.             $GLOBALS['replaced'][$words] = 1; 
  101.  
  102.             } 
  103.  
  104.             } 
  105.  
  106.     else{$string = str_replace($words, $result, $string); 
  107.  
  108.     } 
  109.  
  110.     return $pre.$string; 
  111.  
  112.     } 
  注意手动去掉代码里面的【分隔符】字样!   替换完成后保存即可,然后生成一下文章内容试试。
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_69591.html