解析dedecms使用关键词关联文章无效的解决方法
前段时间因为一直没用这个使用关键词关联文章的功能,所以一直没在意,但最近发现内连建设好了,对于文章的排名起很大的作用,于是就开始整理内链,但是在操作过程中遇到了很多问题,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;
}
先分析204行的代码,细心的朋友可能已经发现,解决后的代码比解决前少了&& !empty($this->Fields['keywords'] 对就是这个原因,dede获取关键词的时候要判断你这篇文章是否填了关键词,这个我们一半不填,所以把他去掉就行了,还有的朋友说应该把cfg_keyword_replace 换成 cfg_keyword_like 他认为是dede的人写错了,其实是自己没有看清罢了,其实不用换这个的,因为他们代表的就不是一个意思。
cfg_keyword_replace是指关键字替换(是/否)使用本功能会影响HTML生成速度: 这项 而cfg_keyword_like 是指使用关键词关连文章:
然后我们在分析ReplaceKeyword 原本的dede是从你所填的tag里 遍历tags,然后与你设置的文档关键词相比较,如果找到了,就将这个关键词替换成带链接的关键词,如果tags为空,就无法执行了。这就是为什么大家使用文档关键词关联文章失败的原因,而解决方法中,直接不让他遍历tags,直接去替换,这样就解决了。
但是出现了几个问题。1,这样解决在生成文章的时候速度会降低,2,无法控制总的关键词链接数量。希望有高手能够解决下。
☉本站的源码不会像其它下载站一样植入大量的广告。为了更好的用户体验以后坚持不打水印
☉本站只提供精品源码,源码在于可用,不在多!!希望在这里找到你合适的。
☉本站提供的整站程序,均带数据及演示地址。可以在任一源码详情页查看演示地址
☉本站所有资源(包括源码、模板、素材、特效等)仅供学习与参考,请勿用于商业用途。
☉如有其他问题,请加网站客服QQ(984818011)进行交流。
- 织梦dede首页列表页获取文章对应的tag标签
- 织梦dede导航栏目顶级和二级判断二级输出不同url
- 织梦dede标签array runphp静态生成乱码BUG解决方法
- 织梦dede如何禁止会员发布文章内容带超链接
- 织梦ajax跨域提交自定义表单和跨域验证码问题
- 织梦CMS MIP文章内容页图片适配百度MIP规范
- 织梦CMS时间格式实现XX秒前、XX分钟前、XX天前
- 织梦DedeCMS更新系统缓存增加清理沉余缓存的功能
- 织梦CMS让channelartlist标签支持currentstyle属性的
- 织梦dede自带编辑器替换百度ueditor编辑器
- 织梦DEDECMS整站动态化或整站静态化设置方法
- 织梦dede 模板路径templets目录都有什么?