当前位置:首页 > CMS教程 > phpcms > 列表

phpcms v9关键字,内联,关联链接完美解决方案

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-21 16:19:17 浏览: 评论:0 

由于PHPCMS关键字关联链接替换的时候 对ALT标签也会替换掉,还有A标签内的东西也会替换掉 这样不是我们的本意,搜遍论坛没有解决方案,看到一个网站解决了,问了下那个朋友,人家告诉我1000元,说官方都没有解决的问题,你说值不值1000,我就纳闷了,自己研究了下DEDE和帝国的程序,搞明白了怎么回事,现在将研究的方法分享出来.

找到include目录下的global.func.php文件,用编辑软件打开后,CTRL+F搜索function keylinks,然后找到如下代码:

  1. function keylinks($txt$replacenum = '')  
  2. {  
  3. $linkdatas = cache_read('keylink.php','',1);  
  4. if($linkdatas)  
  5. {  
  6.   $word = $replacement = array();  
  7.   foreach($linkdatas as $v)  
  8.   {  
  9.    $word1[] = '/'.preg_quote($v[0], '/').'/';  
  10.    $word2[] = $v[0];  
  11.    $replacement[] = '<a href="'.$v[1].'" target="_blank" class="keylink">'.$v[0].'</a>';  
  12.   }  
  13.   if($replacenum != '')  
  14.   {  
  15.    $txt = preg_replace($word1$replacement$txt$replacenum);  
  16.   }  
  17.   else  
  18.   {  
  19.    $txt = str_replace($word2$replacement$txt);  
  20.   }  //phpfensi.com 
  21. }  
  22. return $txt;  
  23. }  

替换成以下代码:

  1. function keylinks($txt$replacenum = '')  
  2. {  
  3. $linkdatas =  
  4. cache_read('keylink.php','',1);  
  5.  
  6.  
  7. //暂时屏蔽超链接  
  8. $txt  
  9. = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU"'\\1-]-\\4-[-\\6',  
  10. $txt);  
  11.  
  12. $GLOBALS['replaced'] = array();  
  13.  
  14.  
  15. if($linkdatas)  
  16. {  
  17.   $word = $replacement =  
  18. array();  
  19.   foreach($linkdatas as  
  20. $v)  
  21.   {  
  22.    $word[] =  
  23. $v[0];  
  24.    $GLOBALS['replaced'][$v[0]] =  
  25. 0;  
  26.    $replacement[] = '<a href="'.$v[1].'" target="_blank"  
  27. class="keylink">'.$v[0].'</a>';  
  28.   }  
  29. }  
  30. $txt  
  31. = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$word,  
  32. \$replacement'\\1',\$replacenum)", $txt);  
  33.  
  34.  
  35. //恢复超链接  
  36. $txt = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU"'\\1>\\3<\\4'$txt); 
  37.  
  38. //高亮专用, 替换多次是可能不能达到最多次  
  39. function _highlight($string$words$result,  
  40. $pre ,$cfg_replace_num)  
  41. {  
  42. $string = str_replace('\"''"',  
  43. $string);  
  44. if($cfg_replace_num > 0)  
  45. {  
  46.   foreach  
  47. ($words as $key =>  
  48. $word)  
  49.   {  
  50.    if($GLOBALS['replaced'][$word] ==  
  51. 1)  
  52.    {  
  53.     continue;  
  54.    }  
  55.    $string  
  56. = preg_replace("/".preg_quote($word)."/"$result[$key], $string,  
  57. $cfg_replace_num);  
  58.    if(strpos($string$word) !==  
  59. false)  
  60.    {  
  61.     $GLOBALS['replaced'][$word]  
  62. =  
  63. 1;  
  64.    }  
  65.   }  
  66. }  
  67. else  
  68. {  
  69.   $string  
  70. str_replace($words$result$string);  
  71. }  
  72. return  
  73. $pre.$string;  
  74. }  

就ok了.

现在实现的功能是:

第一就是会替换所有的关联关键字,第二如果替换次数在模型设置里面设置的是大于0的话,每个关键字只替换一次,主要考虑到替换太多,不利于SEO.

在生成速度上会慢些,还有就是在后台加的关键字会全部替换,要是关键字太密集的话,也会不利于搜索引擎优化,实现起来也不难.

要想一个关键字可以使用下面的代码:

  1. //高亮专用, 替换多次是可能不能达到最多次  
  2. function _highlight($string$words$result$pre ,$cfg_replace_num)  
  3. {  
  4.  
  5. $string = str_replace('\"''"'$string);  
  6. if($cfg_replace_num > 0)  
  7. {  
  8. foreach ($words as $key => $word)  
  9. {  
  10. if($GLOBALS['replaced'][$word] == $cfg_replace_num)  
  11. {  
  12. continue;  
  13. }  
  14. $string = preg_replace("/".preg_quote($word)."/"$result[$key], $string$cfg_replace_num);  
  15. if(strpos($string$word) !== false)  
  16. {  
  17. $GLOBALS['replaced'][$word] ++;  
  18. }  
  19. }  
  20. }  
  21. else  
  22. {  
  23. $string = str_replace($words$result$string);  
  24. }  
  25. return $pre.$string;  
  26. }

Tags: phpcms关键字 phpcms内联链接

分享到: