最实用帝国CMS跨表查询相关链接实现方法
本文结合实例介绍了Imperial CMS跨表查询相关链接的实现方法。分享给大家,供大家参考。具体分析如下:
官方相关链接不灵活,样式不能任意修改,不能跨表。很多人想跨表做相关链接。比如news和info里面有几篇文章,关键词是# 39;北京# 39;那么这些文章用同一个关键词怎么称呼呢?为此编写了一个自定义函数。
建议学习帝国cms课程。
在这个范畴内小范围调用。可以在更大范围内调用同一表中的文章,也可以在更大范围内调用指定表中的文章。可以选择调用的文章数,但实际上可以升级,比如指定调用某个表的文章数,那个表的顺序等。函数没有风格,对代码一知半解的人自己修改也不是特别难。如果有人升级了这个功能,可以分享给大家。
代码如下:
lt;?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
函数user_OtherLink($tbname,$num,$ck){
global $navinfor,$empire,$dbtbpre,$ class _ r;
$ CK =(int)$ CK;
if($ck==1||$ck==2){
$ TB name = $ class _ r[$ navinfor[# 39;classid # 39]][#39;tbname # 39] ;
}
$ num = $ num = = # 39#39;?5:$ num;//默认采集数量为5。
$ tag _ all = explode(# 39;,#39;,$ navinfor[# 39;信息标签# 39;]);
$ TB name _ num = explode(# 39;,#39;,$ TB name);
$ eq _ num = ceil($ num/count($ tag _ all));
for($ I = 0;$ iltcount($ tag _ all);$i++){
$ r _ 1 _ 1 = $ empire -gt;fetch 1(quot;select tagid,tagname,num,isgood,cid from {$dbtbpre}enewstags其中tagname = # 39quot。
$tag_all[$i]。quot#39;order by tagid限制1quot) ;
$ tag _ id[$ I]= $ r _ 1 _ 1[# 39;tagid # 39] ;//标记的ID
$ tag _ num[$ I]= $ r _ 1 _ 1[# 39;数字# 39;] ;//标签下的文章数量
if($ tag _ num[$ I]gt;=$eq_num){//如果标签下的文章数大于或等于平均数,则平均标签下的文章数。
$ tag _ num[$ I]= $ eq _ num;//重新赋值
}else{//如果标签下的文章数小于平均值,那么标签取原来的文章数。同时,重新分配平均值。
$ eg _ tag = $ eq _ num -$ tag _ num[$ I];
$ eq _ num+= $ eg _ tag;
}
//比如有3个标签,每个标签下有4篇文章。现在规定要显示10篇文章,那么每个标签要拿出4篇,一共12篇。
//3个标签,每个标签下有3篇文章,现在规定要显示10篇文章,那么每个标签要拿出3篇文章,一共9篇。
//3个标签,A有2篇,B有5篇,C有3篇,现在要展示10篇,所以A拿出2篇,B拿出5篇,C拿出3篇。
有10篇文章。
//如果除了当前文章之外,A、B、C中还有相同的文章,则扣除重复文章,只取一次。所以指定的数量会有偏差。
for($ I _ n = 0;$ i _ nltcount($ TB name _ num);$i_n++){
$ SQL = $ empire -gt;查询(quotselect tid,classid,id,mid from {$dbtbpre}enewstagsdata其中tagid = # 39quot。$tag_id[$i]。quot#39;命令
按classid quot);
$ ri = 1;
while($ r = $ empire -gt;fetch($sql))
{
$ TB name _ all[$ r[# 39;tid # 39]]= $ class _ r[$ r[# 39;classid # 39]][#39;tbname # 39] ;
if($ TB name _ all[$ r[# 39;tid # 39]]= = $ TB name _ num[$ I _ n]amp;amp$ ri lt= $ tag _ num[$ I]amp;amp$ navinfor[# 39;classid # 39]!= $ r[# 39;classid # 39]amp;amp
$ navinfor[# 39;id # 39]!= $ r[# 39;id # 39]){
if($ CK = = 1 amp;amp$ navinfor[# 39;classid # 39]= = $ r[# 39;classid # 39]){
$ TB name _ all _ r[$ r[# 39;tid # 39]]= $ class _ r[$ r[# 39;classid # 39]][#39;tbname # 39] ;
$ classid _ id[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] .#39;_#39;。$ r[# 39;id # 39] ;
$ classid _ all[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] ;
$ id _ all[$ r[# 39;tid # 39]][$ r[# 39;classid # 39]]= $ r[# 39;id # 39] ;
} else if($ CK = = 2 amp;amp$ class _ r[$ navinfor[# 39;classid # 39]][#39;tbname # 39]= = $ class _ r[$ r[# 39;classid # 39]][#39;tbname # 39]){
$ TB name _ all _ r[$ r[# 39;tid # 39]]= $ class _ r[$ r[# 39;classid # 39]][#39;tbname # 39] ;
$ classid _ id[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] .#39;_#39;。$ r[# 39;id # 39] ;
$ classid _ all[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] ;
$ id _ all[$ r[# 39;tid # 39]][$ r[# 39;classid # 39]]= $ r[# 39;id # 39] ;
}elseif($ck==3){
$ TB name _ all _ r[$ r[# 39;tid # 39]]= $ class _ r[$ r[# 39;classid # 39]][#39;tbname # 39] ;
$ classid _ id[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] .#39;_#39;。$ r[# 39;id # 39] ;
$ classid _ all[$ r[# 39;tid # 39]]= $ r[# 39;classid # 39] ;
$ id _ all[$ r[# 39;tid # 39]][$ r[# 39;classid # 39]]= $ r[# 39;id # 39] ;
}
$ ri++;
}
}
}
}
$ classid _ id _ x = array _ unique($ classid _ id);//删除重复的值
//去掉重复值,不同的标签会有相同的文章。因此重复的值将被删除。例如,A条包含quot北京quot,quot奥运会quot,两个关键词,
b条中还有quot北京quot,quot奥运会quot不去掉重复,A篇的相关链接会在b篇出现两次,所以必须去掉其中一个。
arsort($ classid _ id _ x);//键名排列,逆序
$ tid _ tid = array _ keys($ classid _ id _ x);//取出键名,重新排列。键名是标签的ID: TID。
shuffle($ tid _ tid);//无序,重新排列
$ tid _ tid _ num = count($ tid _ tid);
if($ numlt;$ tid _ tid _ num)$ tid _ tid _ num = $ num+1;//由于这篇文章已经删除,所以补充一下。
for($ I _ tid = 0;$ i _ tidlt$ tid _ tid _ num$i_tid++){
$ tid = $ tid _ tid[$ I _ tid];
$ classid = $ classid _ all[$ tid];
$ id = $ id _ all[$ tid][$ classid];
if($ id = = $ navinfor[# 39;id # 39])继续;//如果是这篇文章,就没必要放在相关链接里了。
$ TB name = $ TB name _ all _ r[$ tid];
$ r _ 1 _ 2 = $ empire -gt;fetch 1(quot;select title,smalltext,titleurl,dp_jt,DP _ dwz from { $ dbtbpre } ecms _ $ TB name其中
id = # 39quot。$ id.quot#39;按新闻时间限制订购1quot) ;
//////此处修改显示样式。
echo $ r _ 1 _ 2[# 39;标题# 39;].#39;#39;;
////////
}
}
?gt;
/**
lt;?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
other link(# 39;新闻,信息# 39;,7,3) ;
?gt;
* */登录后复制
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.qnziyw.cn",如遇到无法解压的请联系管理员!
青柠资源网 » 最实用帝国CMS跨表查询相关链接实现方法
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍
- 提示下载完但解压或打开不了?
- 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们。
- 找不到素材资源介绍文章里的示例图片?
- 对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单