帝國CMS跨表查詢相關鏈接實現方法
帝國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建站有所幫助。
聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至201542412@QQ.com舉報,一經查實,本站將立刻刪除。
上一篇:帝國CMS更改消息提醒的方法
相關推薦
-
帝國cms靈動標簽調用最新專題內容和專題數量的教程
帝國cms用靈動標簽輸出4個最新專題內容包括專題下的文章數量
-
帝國cms調用熱門頂贊文章和圖片數量的方法
帝國cms調用熱門頂的文章和文章里面的圖片數量的方法。。
-
帝國cms靈動標簽調用熱門tags標簽包括tags的數量
用帝國cms靈動標簽調用熱門gs標簽包括gs的數量num為標簽的數量。
-
帝國cms統計某一個數據表的文章信息數量的方法
下面是統計nws表的24發布文章收錄和一個月的更新數量代碼如下:
-
帝國cms如何調用某個欄目下信息id在區間1-100間的文章方法
帝國程序調用某個欄目下信息id在區間1-100間的文章,靈動標簽如何寫,其實這個很簡單,主要就是數據庫SQL調用的方式















