>  기사  >  CMS 튜토리얼  >  Empire CMS에서 크로스 테이블 쿼리 관련 링크를 구현하는 가장 실용적인 방법

Empire CMS에서 크로스 테이블 쿼리 관련 링크를 구현하는 가장 실용적인 방법

silencement
silencement앞으로
2019-11-29 14:04:312419검색

Empire CMS에서 크로스 테이블 쿼리 관련 링크를 구현하는 가장 실용적인 방법

이 문서의 예에서는 Empire CMS의 크로스 테이블 쿼리 관련 링크 구현 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

공식 관련 링크는 유연하지 않고 스타일을 임의로 수정할 수 없으며 테이블을 넘나들 수 없습니다. 예를 들어 뉴스와 정보에는 관련 링크가 있습니다. 여러 기사, 키워드 모두 'Beijing'이 있는데, 같은 키워드로 이 기사들을 어떻게 불러야 할까요?

"EmpirecmsTutorial"을 학습하는 것이 좋습니다.

여기에는 약간의 호출이 사용됩니다. 카테고리, 약간 더 큰 범위는 동일한 테이블의 기사를 호출할 수 있고, 더 큰 범위는 지정된 테이블의 기사를 호출할 수 있습니다. 실제로 호출할 기사 수를 지정하는 등 업그레이드도 가능합니다. 특정 테이블을 호출하는 항목 수, 해당 테이블의 순서 등 기능 스타일이 없으며 코드에 대해 조금 아는 사람이 스스로 수정할 수 있습니다.

코드는 다음과 같습니다.

<?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) ;
?>
**/

이 글이 모든 분들의 Imperial CMS 웹사이트 구축에 도움이 되기를 바랍니다.

위 내용은 Empire CMS에서 크로스 테이블 쿼리 관련 링크를 구현하는 가장 실용적인 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 www.word666.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제