admin
管理员
管理员
  • UID1
  • 粉丝2
  • 关注2
  • 发帖数339
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:4352回复:0

phpcms v9 跨站点 多站点推荐位调用

楼主#
更多 发布于:2013-08-04 12:28
分享到:

最近在做主站和子站的调用数据时遇问题:比如我们设置了推荐位为:首页推荐
分别在子站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>
游客

返回顶部