前段时间因为一直没用这个使用关键词关联文章的功能,所以一直没在意,但最近发现内连建设好了,对于文章的排名起很大的作用,于是就开始整理内链,但是在操作过程中遇到了很多问题,dede无法自动替换关键词,无法使用关键词关联文章等等,于是就开始在网上找,找了很多方法,不能说没有用,但是每个都有缺点,于是自己就开始研究了,经过半天的努力,终于让我搞明白了,今天就给大家分享出来。
按dede默认的如何才能正确替换关键词? 1.需要你在后台设置关键词链接地址,2。需要你在系统的基本参数设置里找到 核心设置---关键字替换(是/否)使用本功能会影响HTML生成速度:选是,3.需要你在系统基本参数里 找到性能选项----使用关键词关连文章: 是。 4.然后再发布内容的时候 需要你在内容的tags里填上 你想替换的关键词(V5.7以下版本) V5.7以上版本的需要你在文章的关键词里填入你想替换的关键词或者关键词不能为空。只有满足这些时,dede才会替换你想要替换的关键词。比如我在我的网站发布一篇文章,我想把里面的 名词,代词等几个关键词连接到我想要的页面,但是我发布的时候很懒,也不想填tags和关键词,这样发布的时候就无法替换关键词链接了,通过以下方法就可以不用填tags和关键词就能替换。
很多朋友在发布文章时,一半不填写关键词,或者Tags,那么久这个功能就无效了。那么如何解决呢? 让我们先看下 解决钱的dede默认的代码,和解决后的代码,分析以下 就明白了。。
代码有2个部分,一是在arc.archives.class。php 里第204行左右。一个是在最后面的function ReplaceKeyword($kw,&$body)函数,让我们看看解决前和解决后的代码的不同吧。
解决前:204行代码:
Copy to ClipboardLiehuo.Net Codes引用的内容:[]
if($arr['type']=='htmltext' && $GLOBALS['cfg_keyword_replace']=='Y' && !empty($this->Fields['keywords']))
{
$this->Fields[$nk] = $this->ReplaceKeyword($this->Fields['keywords'],$this->Fields[$nk]);
}
解决前 ReplaceKeyword函数的代码:
Copy to ClipboardLiehuo.Net Codes引用的内容:[]
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);
foreach($kws as $k)
{
$k = trim($k);
if($k!="")
{
if($i > $maxkey)
{
break;
}
$myrow = $this->dsql->GetOne("select * from [url=mailto:dede_keywords]dede_keywords[/url] where keyword='$k' And rpurl<>'' ");
if(is_array($myrow))
{
$karr[] = $k;
$GLOBALS['replaced'][$k] = 0;
$kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
}
$i++;
}
}
$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
//恢复超链接
$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<[url=file://\\4]\\4'[/url], $body);
return $body;
}
解决后 204行代码:
Copy to ClipboardLiehuo.Net Codes引用的内容:[]
if($arr['type']=='htmltext' && $GLOBALS['cfg_keyword_replace']=='Y')
{
$this->Fields[$nk] = $this->ReplaceKeyword($this->Fields['keywords'],$this->Fields[$nk]);
}
解决后 ReplaceKeyword函数的代码
Copy to ClipboardLiehuo.Net Codes引用的内容:[]
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 [url=mailto:dede_keywords]dede_keywords[/url] WHERE rpurl<>'' ORDER BY rank DESC";
$dsql->SetQuery($query);
$dsql->Execute();
while($row = $dsql->GetArray())
{
$key = trim($row['keyword']);
$key_url=trim($row['rpurl']);
$karr[] = $key;
$kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
}
$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
//恢复超链接
$body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<[url=file://\\4]\\4'[/url], $body);
return $body;
}