0712-2888027 189-8648-0214
微信公众号

孝感风信网络科技有限公司微信公众号

当前位置:主页 > 技术支持 > PHPCMS > phpcms v9关键字,内联,关联链接完美解决方案

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

时间:2024-04-25来源:风信官网 点击: 436次

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

找到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[] = '<a href="'.$v[1].'" target="_blank" class="keylink">'.$v[0].'</a>';
}
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(.*))(>)(.*)(<)(\/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[] = '<a href="'.$v[1].'" target="_blank"
class="keylink">'.$v[0].'</a>';
}
}
$txt
= preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$word,
\$replacement, '\\1',\$replacenum)", $txt);

//恢复超链接
$txt = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/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;
}

热门关键词: phpcms 关键字 内联 关联链接
栏目列表
推荐内容
热点内容
展开