首页 > CMS > 织梦DEDE > 正文

dedecms关键词替换方案

2024-07-12 08:44:17
字体:
来源:转载
供稿:网友

本篇文章主要讲述了dedecms关键词替换方案,根据频率先替换长尾关键词再替换主关键词,本篇章具有一定的参考价值,感兴趣的朋友可以了解一下。

问题:在使用dedecms的文档关键词替换功能时,会造成交叉替换,如:

长尾关键词1:男人喝金丝皇菊有什么好处?

长尾关键词2:喝金丝皇菊有什么好处?

主关键词3:金丝皇菊

使用系统默认的功能时,在替换主关键词的时候,会将上面已经替换好的长尾关键词中的“金丝皇菊”也替换掉,从而破坏了原有的长尾关键词锚文本。

解决思路:

1.先将要替换的关键词替换成类似:

关键词1:'#####0#####'

关键词2:'#####2#####'

关键词3:'#####3#####'

再进行以上替换操作的时候,我们需要保存关键词所对应的锚文本,如:

'#####0#####' --> 关键词1的锚文本

'#####1#####' --> 关键词2的锚文本

'#####2#####' --> 关键词3的锚文本

等全部替换完毕后,我们最后再恢复回来

这里,我们主要修改:include/arc.archives.class.php 文件

修改部分如下:

  1. //高亮专用, 替换多次是可能不能达到最多次 
  2.  
  3. function _highlight($string$words$result$pre) { 
  4.  
  5.     global $cfg_replace_num
  6.  
  7.     //     if (version_compare(PHP_VERSION, '5.5.0', '>=')) 
  8.  
  9.     //     { 
  10.  
  11.     //         $string = $string[0]; 
  12.  
  13.     //         $pre = $pre[0]; 
  14.  
  15.     //     } 
  16.  
  17.       
  18.  
  19.     //修改 Start 
  20.  
  21.     $replaced_array = array(); 
  22.  
  23.     $replaced_tiems = 0; 
  24.  
  25.     //修改 End 
  26.  
  27.       
  28.  
  29.     $string = str_replace('/"''"'$string); 
  30.  
  31.     if ($cfg_replace_num > 0) { 
  32.  
  33.         foreach ($words as $key => $word) { 
  34.  
  35.             if ($GLOBALS['replaced'][$word] == 1) { 
  36.  
  37.                 continue
  38.  
  39.             } 
  40.  
  41.             //修改 Start 
  42.  
  43.             $replace_string = '#####' . $replaced_tiems . '#####'
  44.  
  45.             $replaced_array[$replace_string] = $result[$key]; 
  46.  
  47.             $string = preg_replace("#" . preg_quote($word) . "#"$replace_string$string$cfg_replace_num); 
  48.  
  49.             $replaced_tiems+= 1; 
  50.  
  51.             //修改  End 
  52.  
  53.             //             $string = preg_replace("#".preg_quote($word)."#", $result[$key], $string, $cfg_replace_num); 
  54.  
  55.             if (strpos($string$word) !== FALSE) { 
  56.  
  57.                 $GLOBALS['replaced'][$word] = 1; 
  58.  
  59.             } 
  60.  
  61.         } 
  62.  
  63.         //修改 Start 
  64.  
  65.         foreach ($replaced_array as $k => $v) { 
  66.  
  67.             $string = str_ireplace($k$v$string); 
  68.  
  69.         } 
  70.  
  71.         //修改  End 
  72.  
  73.  
  74.  
  75.     } else { 
  76.  
  77.         $string = str_replace($words$result$string); 
  78.  
  79.     } //Vevb.com 
  80.  
  81.     return $pre . $string
  82.  

注意:这里我们需要在后台修改文档关键词的频率,默认是 频率高的优先替换,频率低的后替换。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表