首页 > 其他分享 >帝国CMS跨表查询相关链接实现方法

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

时间:2024-08-12 16:19:43浏览次数:6  
标签:TAG 39 num tag 跨表 &# 篇文章 CMS 链接

<?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[&#39;classid&#39;]][&#39;tbname&#39;] ;
}
$num= $num==&#39;&#39; ? 5 : $num ; //缺省获取数量为5
$tag_all=explode(&#39;,&#39;,$navinfor[&#39;infotags&#39;]);
$tbname_num=explode(&#39;,&#39;,$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=&#39;".
$tag_all[$i]."&#39; order by tagid limit 1") ;
$tag_id[$i]=$r_1_1[&#39;tagid&#39;] ; //tag的ID
$tag_num[$i]=$r_1_1[&#39;num&#39;] ; //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=&#39;".$tag_id[$i]."&#39; order 
by classid ");
$ri=1 ;
while($r=$empire->fetch($sql))
{
$tbname_all[$r[&#39;tid&#39;]]=$class_r[$r[&#39;classid&#39;]][&#39;tbname&#39;] ;
if($tbname_all[$r[&#39;tid&#39;]]==$tbname_num[$i_n] && $ri <= $tag_num[$i] && $navinfor[&#39;classid&#39;]!=$r[&#39;classid&#39;] && 
$navinfor[&#39;id&#39;]!=$r[&#39;id&#39;]){
if($ck==1&&$navinfor[&#39;classid&#39;]==$r[&#39;classid&#39;]){
$tbname_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==2&&$class_r[$navinfor[&#39;classid&#39;]][&#39;tbname&#39;]==$class_r[$r[&#39;classid&#39;]][&#39;tbname&#39;]){
$tbname_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){
$tbname_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);//去除重复的值
//去除重复的值,不同的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[&#39;id&#39;]) 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=&#39;".$id."&#39; order by newstime limit 1") ;
////////显示样式在这修改
echo $r_1_2[&#39;title&#39;].&#39; &#39; ;
////////
}
}
?>
/**
<?php
OtherLink(&#39;news,info&#39;,7,3) ;
?>
**/

 

标签:TAG,39,num,tag,跨表,&#,篇文章,CMS,链接
From: https://www.cnblogs.com/hwrex/p/18355179

相关文章

  • 如何搬迁DedeCMS站点数据
    如何搬迁DedeCMS站点数据我们先将目的地的数据库账号密码获取到,并且保证持有一个数据库或拥有创建数据库的权限。1、首先登录织梦的后台,进入到“系统》数据库备份/还原”栏目 2、如果之前有备份过数据,就需要将织梦程序根目录下的data文件夹下的backupdata文件夹改名为其他名称......
  • 帝国cms手机端模板怎么用
    帝国CMS手机端模板为网站提供优化后的移动端浏览体验。使用帝国CMS手机端模板非常简单,以下是分步指南:步骤1:查找并下载模板访问帝国CMS官方网站或第三方模板市场,浏览和下载您喜欢的手机端模板。步骤2:上传模板到帝国CMS登录帝国CMS后台,导航到“模板管理”>“手机端模板”......
  • 帝国CMS列表页面调用关键字TAG的方法
    $nsmalltext=$r[smalltext];$ntext=strip_tags($nsmalltext);//去除内容简介里的HTML标签$newtext=esub($ntext,100,&#39;...&#39;);//限制100字$keyboard=$r[keyboard];$r_tag=explode(",",$keyboard);$tempid=1;//这里是搜索模板IDfor($i=0;$i<count($r_tag);$i++)......
  • C语言编译和链接超详解
    文章目录1.翻译环境和运行环境2.翻译环境2.1预处理(预编译)2.2编译2.2.1词法分析2.2.2语法分析2.2.3语义分析2.3汇编2.4链接3.运行环境1.翻译环境和运行环境在ANSIC的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代......
  • windows开发工具说明:链接器link.exe 编译器cl.exe 资源编译器rc.exe
    路径说明C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\bin这个路径指向的是MicrosoftVisualStudio2015(版本14.0)中包含的C++编译器及其相关的工具。这些工具包括编译器本身、链接器、资源编译器以及其他用于构建C++应用程序的实用程序。通常,这个目录下的......
  • 贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)
    目录标题:贷齐乐系统最新版SQL注入(绕过WAF可unionselect跨表查询)内容:一,环境部署二,源码分析三,sql注入总结:[回到顶部](#article_top)一,环境部署本漏洞由于是2015年爆出的,所以这里源码使用的PHP版本不支持7版本,这里我们可以使用PHP5.4.45版本,只需小皮进行下载更改即......
  • 【经验分享】数据结构——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散
    目录1.线性探测(LinearProbing)2.平方探测(QuadraticProbing)3.双散列探测(DoubleHashing)4.分离链接法(SeparateChaining)5.再散列(Rehashing)如何解答这些常见问题1.写出处理冲突的方法名称2.构造基于该处理冲突方法的哈希表3.求出该哈希表在等概率情况下查找成功......
  • 动态链接库
    空间浪费是静态链接的一个问题,另一个问题是静态链接对程序的更新、部署和发布也会带来很多麻烦。比如程序Program1所使用的Lib.o是由一个第三方厂商提供的,当该厂商更新了Lib.o的时候(比如修正了lib.o里面包含的一个Bug),那么Program1的厂商就需要拿到最新版的Lib.o,然后将其与Program1......
  • 深入了解HTML链接:从基础到进阶——WEB开发系列06
    超链接是互联网中最有趣的创新之一,自互联网诞生起,它们就一直是互联网的一个核心特性,使网络成为一个互联的系统。超链接允许我们将文档连接到其他文档或资源,甚至是文档中的特定部分。通过一个简单的网址,可以提供应用程序。几乎所有网络内容都可以被转换为链接,点击或激活这些超链......
  • 硬链接和软链接
    硬链接和软链接1.概念软链接(SymbolicLink),一个指向另一个文件的指针,实际上是一个独立的文件,保存了被链接文件的路径。硬链接(HardLink)在文件系统中创建的多个指针指向同一块磁盘区域。2.使用方法软连接ln-s(symbolic)源文件链接文件#创建软链接例如......