用过帝国cms的朋友应该都知道帝国CMS的默认内链功能非常蛋疼,内容关键词替换中会遇到替换了原文中已存在的手动链接,如已经手动添加的关键词链接:i5家用电脑配置,如果我们在新闻模型内容关键词连接中填写了 i5 那么文章中已存在的i5家用电脑配置链接会被拆分,这样用户体验非常不好!
解决办法、首先我们找到/e/class/functions.php
2、打开文件,搜索 //替换关键字
3、替换下面的if(STR_IREPLACE)判断,/i替换为(?!([^<]*>)|([^<]*</a>))/i,如下图红色所示
修改前代码:
if(STR_IREPLACE)
{
$newstext=empty($public_r[repkeynum])?str_ireplace($r[keyname],'<a href='.$r[keyurl].' target=_blank class=infotextkey>'.$r[keyname].'</a>',$newstext):preg_replace('/'.$r[keyname].'/i','<a href='.$r[keyurl].' target=_blank >'.$r[keyname].'</a>',$newstext,$public_r[repkeynum]);
}
else
{
$newstext=empty($public_r[repkeynum])?str_replace($r[keyname],'<a href='.$r[keyurl].' target=_blank class=infotextkey>'.$r[keyname].'</a>',$newstext):preg_replace('/'.$r[keyname].'/i','<a href='.$r[keyurl].' target=_blank >'.$r[keyname].'</a>',$newstext,$public_r[repkeynum]);
}
修改后代码:
if(STR_IREPLACE)
{
$newstext=empty($public_r[repkeynum])?str_ireplace($r[keyname],'<a href='.$r[keyurl].' target=_blank class=infotextkey>'.$r[keyname].'</a>',$newstext):preg_replace('/'.$r[keyname].'(?!([^<]*>)|([^<]*</a>))/i','<a href='.$r[keyurl].' target=_blank >'.$r[keyname].'</a>',$newstext,$public_r[repkeynum]);
}
else
{
$newstext=empty($public_r[repkeynum])?str_replace($r[keyname],'<a href='.$r[keyurl].' target=_blank class=infotextkey>'.$r[keyname].'</a>',$newstext):preg_replace('/'.$r[keyname].'(?!([^<]*>)|([^<]*</a>))/i','<a href='.$r[keyurl].' target=_blank >'.$r[keyname].'</a>',$newstext,$public_r[repkeynum]);
}
修改后原先手动链接不变了
4、原理主要是给添加了一个规则过滤掉已存在的链接,不为连接替换关键词链接