phpcms v9 跨站點 多站點推薦位調用
2024-07-09 22:53:06
供稿:網友
最近在做主站和子站的調用數據時遇問題:比如我們設置了推薦位為:首頁推薦
分別在子站1、子站2的內容中推薦一篇新聞為首頁推薦
在主站調用傳統的調用方式為:
{pc:content action="position" posid="1" order="listorder DESC" thumb="1" num="1"}
{loop $data $r}
。。。。。。
{/loop}{/pc}
我們查看緩存模版以及content_tag.class.php文件下的position函數 它判斷了一個siteid的變量如果為空那么就自動為主站默認1
這樣的話即使你這樣調用
{pc:content action="position" posid="1" siteid="$siteid" order="listorder DESC" thumb="1" num="1"}
{loop $data $r}
。。。。。。
{/loop}{/pc}
那么也只能調用當前的站點,做不到全站調用
解決方案:
打開擴展函數庫:寫入函數
/*跨站點獲取推薦位信息列表
$posid 推薦位id
$num 調用條數
$thumb 1為圖片 0 為文字
$siteid 站點id
$catid 為欄目ID
*/
function pos_oversite($posid,$num=6,$thumb=1,$order="listorder desc",$siteid="",$catid="")
{
$sql="";
$array = array();
$pos=intval($posid);
$db=pc_base::load_model('content_model');
$db->table_name='wecheposition_data';
if(!empty($catid)) $sql = "`catid` = '$catid' AND ";
if($thumb) $sql.= "`thumb` = '$thumb' AND ";
if(!empty($siteid)) $sql.= "`posid` = '".$posid."' AND `siteid` = '".$siteid."'";
else $sql.= "`posid` = '$posid'";
$news=$db->select($sql,'*',$num,$order);
if(!empty($news)) {
foreach($news as $info)
{
$key = $info['catid'].'-'.$info['id'];
$array[$key] = string2array($info['data']);
$arr= getidurl($info['catid'],$info['id'],$info['modelid']);
$array[$key]['url']=$arr['url'];
$array[$key]['catname']=$arr['catname'];
$array[$key]['caturl']=$arr['caturl'];
$array[$key]['id'] = $info['id'];
$array[$key]['catid'] = $info['catid'];
}
}
return $array;
}
/*獲取單條信息新聞信息
$id 新聞ID
$modelid 模型id
$catid 為欄目ID
*/
function getidurl($catid,$id,$modelid)
{
$cid=intval($catid);
$db=pc_base::load_model('content_model');
$db->table_name='wechemodel';
$r=$db->get_one("`modelid`={$modelid}");
$db->table_name="weche".$r['tablename'];
$n=$db->get_one("`id`={$id}");
$array=array();
$array['url']=$n['url'];
$array['title']=$n['title'];
$array['description']=$n['title'];
$array['updatetime']=$n['updatetime'];
$array['inputtime']=$n['inputtime'];
$db->table_name="wechecategory";
$c=$db->get_one("`catid`={$catid}");
$array['catname']=$c['catname'];
$sid=$c['siteid'];
$db->table_name='wechesite';
$s=$db->get_one("`siteid`={$sid}");
if(stripos($c['catname'],"http://")) $array['caturl']=$c['url'];
else {
$siteurl=$s['domain'];
$array['caturl']=$siteurl.$c['url'];
}
return $array;
}
有些同學會問:系統不是有一個go()函數可以獲取超鏈接地址嗎
確實,但是那個函數存在的情況是單一性站點才能所有
多站點調用的時候會輸出url為空
另外這個getidurl($catid,$id,$modelid)函數其實是很有用處的
譬如我們經常調用一些新聞帶欄目名稱的
前臺調用代碼講解:
<?php $data=pos_oversite(26,17,0);?> //這一種是調用推薦位為26 調用條數為17
{loop $data $r}
{if $n==9}</ul>
<div class="clearfix" style="margin-top:10px;"></div>
<ul class="i_list">{/if}
<li><span>[<a href="{$r['caturl']}" title="{$r[catname]}">{$r[catname]}</a>]</span><a href="{$r['url']}" title="{$r[title]}">{str_cut($r[title],30,'')}</a></li>
{/loop}
</ul>