phpcms v9站群跨站点、多站点推荐位调用功能

时间:2022-10-22 13:30:37

最近在做到主站和子站的调用时遇到了这个问题:

比如我们设置了推荐位为:首页推荐

分别在子站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>

{/if}
<a href="{$r['caturl']}" title="{$r[catname]}">{$r[catname]}</a>

<a href="{$r['url']}" title="{$r[title]}">{str_cut($r[title],30,'')}
{/loop}