你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

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

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

然后将:

function keylinks($txt, $replacenum = '') { $linkdatas = cache_read('keylink.php','',1); if($linkdatas) {   $word = $replacement = array();   foreach($linkdatas as $v)   {    $word1[] = '/'.preg_quote($v[0], '/').'/';    $word2[] = $v[0];    $replacement[] = ''.$v[0].'';   }   if($replacenum != '')   {    $txt = preg_replace($word1, $replacement, $txt, $replacenum);   }   else   {    $txt = str_replace($word2, $replacement, $txt);   } } return $txt; } 替换成以下代码:

 

function keylinks($txt, $replacenum = '') { $linkdatas = cache_read('keylink.php','',1);   //暂时屏蔽超链接 $txt = preg_replace("/()(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $txt);  $GLOBALS['replaced'] = array();   if($linkdatas) {   $word = $replacement = array();   foreach($linkdatas as $v)   {    $word[] = $v[0];    $GLOBALS['replaced'][$v[0]] = 0;    $replacement[] = ''.$v[0].'';   } } $txt = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$word, \$replacement, '\\1',\$replacenum)", $txt);   //恢复超链接 $txt = preg_replace("/()/isU", '\\1>\\3<\\4', $txt); //高亮专用, 替换多次是可能不能达到最多次 function _highlight($string, $words, $result, $pre ,$cfg_replace_num) { $string = str_replace('\"', '"', $string); if($cfg_replace_num > 0) {   foreach ($words as $key => $word)   {    if($GLOBALS['replaced'][$word] == 1)    {     continue;    }    $string = preg_replace("/".preg_quote($word)."/", $result[$key], $string, $cfg_replace_num);    if(strpos($string, $word) !== false)    {     $GLOBALS['replaced'][$word] = 1;    }   } } else {   $string = str_replace($words, $result, $string); } return $pre.$string; } 就ok了

现在实现的功能是:
第一就是会替换所有的关联关键字
第二如果替换次数在模型设置里面设置的是大于0的话,每个关键字只替换一次,主要考虑到替换太多 不利于SEO
在生成速度上会慢些,还有就是在后台加的关键字会全部替换,要是关键字太密集的话,也会不利于搜索引擎优化。 实现起来也不难。

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

 

//高亮专用, 替换多次是可能不能达到最多次 function _highlight($string, $words, $result, $pre ,$cfg_replace_num) {  $string = str_replace('\"', '"', $string); if($cfg_replace_num > 0) { foreach ($words as $key => $word) { if($GLOBALS['replaced'][$word] == $cfg_replace_num) { continue; } $string = preg_replace("/".preg_quote($word)."/", $result[$key], $string, $cfg_replace_num); if(strpos($string, $word) !== false) { $GLOBALS['replaced'][$word] ++; } } } else { $string = str_replace($words, $result, $string); } return $pre.$string; }