织梦dedecms文档关键词出现重复链接优先级的完美解决方法

织梦dedecms5.7 sp2的文档关键词功能可以给网站增加内容,但是发现关键词维护这个功能一个问题没有处理好,就是当关键词出现不同长度重叠时会出现错误。

比如同时有两个关键词, 织梦模板 和 织梦模板下载  这里,如果出现织梦模板下载,他就会给“织梦模板”加上个链接,然后织梦模板下载又套一个链接,造成页面HTML标签不对称,对SEO排名很不友好,网站内链的布局也会很混乱。

下面学技巧给出解决方法,这是试验了一下午

找到function ReplaceKeyword($$kw,&$$body)这行,从这行开始一直替换到文件结束。这段代码我亲自测试过,可以解决,网上有很多这样的,我都一个个的测试过,都不行,有的可能是文件中的符号有问题。

function ReplaceKeyword($$kw,&$$body)
{
global $$cfg_cmspath;
$$maxkey = 5;
$$kws = explode(",",trim($$kw)); //以分好为间隔符
$$i=0;
$$karr = $$kaarr = $$GLOBALS['replaced'] = array();


//暂时屏蔽超链接
$$body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $$body);
global $$dsql;
$$query="SELECT * FROM dede_keywords WHERE rpurl<>'' and sta=1 ORDER BY length(keyword)desc";
$$dsql->SetQuery($$query);
$$dsql->Execute();
while($$row = $$dsql->GetArray())
{
$$key = trim($$row['keyword']);
$$key_url=trim($$row['rpurl']);
$$karr[] = $$key;
$$kaarr[] = "<u><a href='$$key_url' target='_blank' title='$$key'>$$key</a></u>";
}
foreach ($$karr as $$key => $$word)
{

$$body = preg_replace("/(^|>)([^<]+)(?=<|$$)/sUe", "_highlight('\\2', \$$karr[$$key], \$$kaarr[$$key], '\\1')", $$body);
//echo $$body."<br/>";
//恢复超链接
$$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $$body);
//暂时屏蔽超链接
$$body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $$body);

}

//恢复超链接
$$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $$body);
return $$body;
}


}//End Archives


//高亮专用, 替换多次是可能不能达到最多次
function _highlight($$string, $$words, $$result, $$pre)
{
global $$cfg_replace_num;
$$string = str_replace('\"', '"', $$string);


if($$GLOBALS['replaced'][$$words] == 1)
{
return $$pre.$$string;
}

if($$cfg_replace_num > 0)
{
$$string = preg_replace("/".preg_quote($$words)."/", $$result, $$string, $$cfg_replace_num);
if(strpos($$string, $$words) !== false)
{
$$GLOBALS['replaced'][$$words] = 1;
//echo $$words;
}
}
else
{
$$string = str_replace($$words, $$result, $$string);
}
return $$pre.$$string;
}

下面我贴出我修改过的,大家如果做过二次开发,请自行备份,然后用代码比对,看着修改吧。

arc.archives.class

+