帝国CMS二次开发跨表查询相关文章

官方的相关链接不灵活,样式不能任意的修改无法跨表。很多人想跨表做相关链接,比如news和info都有几篇文章,关键词都有’北京’,那么如何调用这些有有同一关键词的文章呢?为此写了一个函数。
   

小范围的调用于本分类,稍大一点范围可以调用同一表的文章,再大一点可以调用指定的表的文章。可以选要调用文章的数量。
其实还可以升级,比如指定调用某个表的文章数量,那个表的顺序等。
函数没有样式,稍微懂一点代码的可以自行修改。其实不是特别难。
如果有哪位升级了这个函数,可以共享给大家。

<?php 

function user_OtherLink($tbname,$num,$ck){
        global $navinfor,$empire,$dbtbpre,$class_r ;
        $ck=(int)$ck ;
        if($ck==1||$ck==2){
        $tbname=$class_r[$navinfor['classid']]['tbname'] ;
        }
        $num= $num=='' ? 5 : $num ; //缺省获取数量为5
        $tag_all=explode(',',$navinfor['infotags']);
        $tbname_num=explode(',',$tbname) ;
        $eq_num=ceil($num/count($tag_all));
        for($i=0;$i<count($tag_all);$i++){
        $r_1_1 =$empire->fetch1(select tagid,tagname,num,isgood,cid from {$dbtbpre}enewstags where tagname='.$tag_all[$i].' order by tagid limit 1) ;
        $tag_id[$i]=$r_1_1['tagid'] ;        //tag的ID
        $tag_num[$i]=$r_1_1['num'] ;        //tag下的文章数量
        if($tag_num[$i]>=$eq_num){//如果TAG下的文章数量比平均的数量大或者等于,那么TAG的文章数量取平均值
        $tag_num[$i] = $eq_num ;//重新赋值
        }else{//如果TAG下的文章小于平均值,那么TAG取原有的文章数量。同时重新赋值平均值。
        $eg_tag= $eq_num-$tag_num[$i] ;
        $eq_num += $eg_tag ;
        }
        //比如说有3个TAG,每个TAG下有4篇文章,现在指定要显示10篇文章,那么每个TAG要拿出4篇,共有12篇文章
        //3个TAG,每个TAG下有3篇文章,现在指定要显示10篇文章,那么每个TAG要拿出3篇文章,共有9篇文章
        //3个TAG,A有2篇文章,B有5篇文章,C有3篇文章,现在要显示10篇文章,那么A拿出2篇文章,B拿出5篇文章,C拿出3篇文章,共有10篇文章
        //如果 A、B、C中除了当前文章,还有相同的文章,那么会扣除重复的那篇文章,只取一次。所以指定的数量会有偏差
        for($i_n=0;$i_n<count($tbname_num);$i_n++){
        
        $sql=$empire->query(select tid,classid,id,mid from {$dbtbpre}enewstagsdata where tagid='.$tag_id[$i].' order by classid );
        $ri=1 ;
                while($r=$empire->fetch($sql))
                {
                $tbname_all[$r['tid']]=$class_r[$r['classid']]['tbname'] ;
                if($tbname_all[$r['tid']]==$tbname_num[$i_n] && $ri <= $tag_num[$i] && $navinfor['classid']!=$r['classid'] && $navinfor['id']!=$r['id']){
                if($ck==1&&$navinfor['classid']==$r['classid']){
                
                $tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname'] ;
                $classid_id[$r['tid']]=$r['classid'] . '_' . $r['id'] ;
                $classid_all[$r['tid']]=$r['classid'] ;
                $id_all[$r['tid']][$r['classid']]=$r['id'] ;
                
                }elseif($ck==2&&$class_r[$navinfor['classid']]['tbname']==$class_r[$r['classid']]['tbname']){
                
                $tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname'] ;
                $classid_id[$r['tid']]=$r['classid'] . '_' . $r['id'] ;
                $classid_all[$r['tid']]=$r['classid'] ;
                $id_all[$r['tid']][$r['classid']]=$r['id'] ;
                
                }elseif($ck==3){
                
                $tbname_all_r[$r['tid']]=$class_r[$r['classid']]['tbname'] ;
                $classid_id[$r['tid']]=$r['classid'] . '_' . $r['id'] ;
                $classid_all[$r['tid']]=$r['classid'] ;
                $id_all[$r['tid']][$r['classid']]=$r['id'] ;
                
                }
                $ri++;        
                }
                }
        }
        }
        $classid_id_x=array_unique($classid_id);//去除重复的值
        //去除重复的值,不同的TAG会有相同的文章。所以去除重复的值。比如A篇文章里面都有北京,奥运,两个关键词,B篇文章里面也有北京,奥运在不去除重复的情况下,A篇的相关链接会出现两次B文章。所以必须去除其中一个。
        arsort($classid_id_x); //按键名排列,倒序
        $tid_tid=array_keys($classid_id_x) ;//取出键名重新排列,键名即为TAG的ID:tid
        shuffle($tid_tid);//顺序打乱,重新排
        $tid_tid_num=count($tid_tid) ;
        if($num<$tid_tid_num) $tid_tid_num=$num+1 ;//由于去除了本文章,所以再加一条弥补
        for($i_tid=0;$i_tid<$tid_tid_num;$i_tid++){
        $tid=$tid_tid[$i_tid];
        $classid=$classid_all[$tid];
        $id=$id_all[$tid][$classid];
        if($id==$navinfor['id']) continue ; //如果是本文章,相关链接里面就不用再放了。
        $tbname=$tbname_all_r[$tid];
        $r_1_2 =$empire->fetch1(select title,smalltext,titleurl,dp_jt,dp_dwz from {$dbtbpre}ecms_$tbname where id='.$id.' order by newstime limit 1) ;

        ////////显示样式在这修改
         echo $r_1_2['title'].' ' ;
        ////////
        }
        }        
?>
/**
<?php 
OtherLink('news,info',7,3) ;
?>
**/

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

云资源网 » 帝国CMS二次开发跨表查询相关文章

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
你们有qq群吗怎么加入?
当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群https://sudo1.com/page-qun.html。
  • 会员数(个)
  • 12275资源数(个)
  •        
  • 资源(G)
  •        
  • 今日下载
  • 1365稳定运行(天)

提供最优质的资源集合

立即查看 了解详情