分享好友 cms教程首页 频道列表

帝国CMS跨表查询相关链接实现方法

帝国cms教程  2015-08-02 10:420

本文实例讲述了帝国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) ;
?>
**/

希望本文所述对大家的帝国CMS建站有所帮助。

查看更多关于【帝国cms教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法
这篇文章主要为大家介绍了帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法,通过修改帝国CMS源码,添加处理字段与代码,实现专题调用标签eshowzt可处理标签模板PHP代码的功能,增加了程序的灵活性,需要的朋友可以参考下

0评论2016-04-27752

帝国cms使用js+css实现当前栏目高亮效果的方法
这篇文章主要为大家介绍了帝国cms使用js+css实现当前栏目高亮效果的方法,对于进行帝国CMS模板的开发非常有用!需要的朋友可以参考下

0评论2015-08-02226

帝国cms通过自定义函数获取新闻文章数的实现代码
这篇文章主要为大家介绍了帝国cms系统中通过用户自定义函数获取用户发表新闻数量的方法,主要是分享下帝国cms自定义函数功能示例,有需要的朋友参考下

0评论2015-08-02214

帝国CMS生成sitemap实现代码分享
这篇文章主要介绍了帝国CMS生成sitemap实现代码分享,可以生成含有首页链接、栏目页链接和内容页链接的sitemap文件,需要的朋友可以参考下

0评论2015-08-02140

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
这篇文章主要介绍了帝国CMS下在PHP文件中调用数据库类执行SQL语句实例,本文还详细介绍了帝国CMS数据库类中的一些常用方法,需要的朋友可以参考下

0评论2015-08-02113

帝国ECMS实现AJAX无刷新加入购物车的方法
这篇文章主要为大家介绍了帝国ECMS实现AJAX无刷新加入购物车的方法,对于开发商城系统的朋友很有借鉴参考价值!需要的朋友可以参考下

0评论2015-08-02191

帝国cms灵动标签调用discuz x1和x2帖子技巧
帝国cms灵动标签调用技巧下文分享给大家,一起来看看吧

0评论2015-08-02185

帝国cms实现会员注册之后根据所在会员组转向的方法
这篇文章主要为大家介绍了帝国cms实现会员注册之后根据所在会员组转向的方法,对于开发会员系统来说非常有借鉴价值,需要的朋友可以参考下

0评论2015-08-02219

帝国CMS单次只能上传20个文件问题的解决方法(max_file_uploads)
最近在使用帝国CMS的时候,发现了一个问题:在上传文件或图片的时候,一次性上传不能超过20个,如果超过20个也只能成功20个,其余的均失败

0评论2015-08-02195

帝国cms自定义字段实现价格区域范围筛选的方法
这篇文章主要为大家介绍了帝国cms自定义字段实现价格区域范围筛选的方法,需要的朋友可以参考下

0评论2015-08-02171

帝国cms使用自定义函数获取用户发表新闻数量的方法
本例主要是分享下帝国cms自定义函数功能,介绍了帝国cms系统中通过用户自定义函数获取用户发表新闻数量的方法,实现获取用户发表的新闻数量,没有现成的方法,不过可以用自定义函数来实现

0评论2015-08-02119

帝国cms万能标签实现标题截取后自动加入省略号的方法
这篇文章主要为大家介绍了帝国cms万能标签实现标题截取后自动加入省略号的方法,非常实用,需要的朋友可以参考下

0评论2015-08-02159

帝国CMS自定义函数取得顶级栏目名称的方法
这篇文章主要为大家介绍了帝国CMS自定义函数取得顶级栏目名称的方法,可通过调用自定义函数实现获取当前页面的顶级栏目名称,是非常实用的技巧,在进行帝国CMS二次开发中具有一定的学习与借鉴价值,需要的朋友可以参考下

0评论2015-08-02105

帝国CMS后台风格样式修改方法
这篇文章主要为大家介绍了帝国CMS后台风格样式修改方法,只需要简单的几个步骤即可实现按照用户需求打造个性化的网站后台,是非常实用的技巧,需要的朋友可以参考下

0评论2015-08-02158

帝国cms判断输出副标题还是原标题的2种方法
这篇文章主要介绍了帝国cms判断输出副标题还是原标题的2种方法,一种用在title标签,一种是用在正文输出,需要的朋友可以参考下

0评论2015-08-02210

更多推荐