DeDeCMS(织梦)相关文章调用优化

来源:原创城子居 / 2016-10-17 19:22
《DeDeCMS(织梦)相关文章调用优化》这篇文章介绍对dede:likearticle标签的优化,改变了DeDeCMS默认的相关文章调用机制。...

在使用DeDeCMS二次开发的时候,很多情况下需要调用相关文章,DeDeCM自带的dede:likearticle非常不好用,有时候调用不出数据,所以对dede:likearticle进行修改,使它能正常工作。

DeDeCMS相关文章调用不出的原因

看了下源码后发现,dede:likearticle调用数据异常是因为变量二次定义的时候覆盖了tag内容,所以之前的由tag字段调用的相关文章,直接变成了根据keywords调用,而且在凑mysql查询语句的时候,没有考虑周全,漏掉了一些关键词匹配的情况,所以导致数据有时候调用不出来。

DeDeCMS相关文章调用优化原理

完善DeDeCMS相关文章调用机制,优先根据tag标签寻找相关文章,没有tag相同的情况下再调用keywords里包含tag的文章,都没有的情况下调用当前栏目下的文章。

DeDeCMS相关文章调用优化

修改标签源码文件:include/taglib/likearticle.lib.php,这里直接贴源码片段:

PHP	if(!empty($refObj->Fields['tags'])) {
		$keywords = $refObj->Fields['tags'];   //这里应该为keywords 而非keyword
	}
	else {
		$keywords = ( !empty($refObj->Fields['keywords']) ? $refObj->Fields['keywords'] : '' );  //同上
	}

修改mysql查询语句的$query字段中的,$keyword拼凑逻辑,并且对查询出来的tag字段结果做缓存(缓存这里有一个问题,如果tag标签非常多的话,会生成很多缓存文件,占用系统很多文件连接符,导致磁盘空间很多,却无法写入文件的情况,当然一般是不会出现这样的情况的)。

PHP$keyword = '';
if(!empty($keywords))
{
		$keywords = explode(',' , trim($keywords));
		$keyword = '';
		$n = 1;
		$idlist_all = array();
		foreach($keywords as $k)
		{
			if($n > 9)  break;
			 
			if(trim($k)=='') continue;
			$idlist = GetCache('taglist',$k);
			if( empty($idlist)) {
				$rel ='';
				$dsql->SetQuery(" Select `aid`,`tag` From  `imm_taglist` WHERE tag='$k' ;");
				$dsql->Execute();
				while($re = $dsql->GetArray()){
					$rel[]=$re['aid'];
				}
				if(!empty($refObj->Fields['tags'])) {
					SetCache('taglist', $k, $rel, 30*24*60*60*1);
				}
				$idlist = $rel;
			};
			if(!empty($idlist)){
				$idlist_all= array_merge($idlist_all,$idlist);
			}else{ continue;}



			$n++;
		}
		$idlist_all = array_unique($idlist_all);
		$idlist_all = join(',',$idlist_all);
		$keyword = ' arc.id IN('.$idlist_all.')';

写在最后

以上就是对dede:likearticle标签的优化,优化了相似文章的调用方法:从寻找相同的tag开始,找不到就从keywords里找,都没有的情况下,调用同栏目文章。

0
0

本站原创内容请勿转载,因为这样大家可以聚集在这里讨论,请将本文链接分享给他/她!

文章讨论