帝国cms数据表(帝国cms分表)
本文实例介绍了Imperial CMS中跨表查询相关链接的实现方法。分享给大家,供大家参考。具体分析如下:
官方相关链接不灵活,不能随意修改样式,不能跨表。许多人希望跨表建立相关链接。例如,新闻资讯中有几篇文章,关键词是“北京”。那么如何调用这些相关链接呢?具有相同关键字的文章怎么办?我为此目的编写了一个自定义函数。
推荐学习《帝国cms教程》
小范围的调用可用于此类别。稍微大一点的范围可以调用同一个表的文章。更大的范围可以调用指定表中的文章。您可以选择要调用的文章数量。其实还可以升级,比如指定调用某个表。文章数量、表格顺序等。功能无风格。对代码稍有了解的人可以自行修改。这并不是特别困难。如果有人升级了这个功能,可以分享给大家。
代码如下:
?phpfunction 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;$icount($tag_all);$i++){$r_1_1=$empire-fetch1('从{$dbtbpre}enewstags 中选择tagid,tagname,num,isgood,cid 其中tagname=''.$tag_all[$i].'' 按tagid 限制排序1') ;$tag_id[$i]=$r_1_1['tagid'] ; //标签的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_ncount($tbname_num);$i_n++){$sql=$empire-query('select tid,classid,id,mid from {$dbtbpre }enewstagsdata 其中tagid=''.$tag_id[$i].'' 按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的相关链接就会出现两次。文章。因此必须删除其中之一。
arsort($classid_id_x); //按键名排列,倒序$tid_tid=array_keys($classid_id_x);//取出键名重新排列,键名就是TAG的ID:tidshuffle($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 ']) 继续; //如果是本文,则无需包含相关链接。 $tbname=$tbname_all_r[$tid];$r_1_2=$empire-fetch1('从{$dbtbpre}ecms_$tbname 中选择标题、smalltext、titleurl、dp_jt、dp_dwz,其中id=''.$id。'' order by newstime limit 1') ;////////此处修改显示样式echo $r_1_2['title'].' ' ;////////}}?/**?phpOtherLink('news ,info',7,3) ;**/希望这篇文章对大家的帝国CMS建站有所帮助。以上就是帝国CMS跨表查询相关链接最实用的实现方法的详细介绍。更多资讯请关注木库阁其他相关文章!