跨域获得新闻信息

公司有两个网站,领导让把另一个网站的新闻显示在主网站上。不想再繁琐连接子网站数据库,为了省工省时,就用jquery做个简单的跨域。

假设主网站为:master.com     子网站为:slave.com

1、先在slave.com做一个新闻列表的json数据接口。在新闻的控制器article中添加的jsonNews方法。

    function jsonNews(){
        $list = syDB('article')->findAll(array('tid'=>'8','isshow'=>1),'addtime desc','id,title,addtime');
        foreach ($list as $k=>$val){
            $list[$k]['addtime'] = date("Y-m-d",$val['addtime']);
            $list[$k]['url'] = "/News/hnNews/id/".$val['id'].".html";
        }
        $json_string = json_encode($list);
        echo "getProfile($json_string)";
    }

2、在master.com中调用接口,并显示列表。

      <ul>
            <div id="newslist"></div> 
            <script type="text/javascript"> 
            function getProfile(str) {
                var list = ""; 
                $.each(str,function(i,o){
                        list+= "<li><span>"+o.addtime+"</span><a href="+o.url+" target='_blank'  title="+o.title+">"+o.title+"</a></li>";
                    })
                   $("#newslist").html(list);
            } 
            </script> 
            <script type="text/javascript" src="http://slave.com/index.php?c=article&a=jsonNews"></script>
        </ul>

通过获得子网站json接口的数据,然后在主网站排列出来就完事了。

虽然把新闻排列出来,但是这并不算是完事了,因为新闻还必须的点进去,查看内容。

为了不和原来的视图模板混淆,于是我新建了一个模板文件:hnNews.html。步骤1中,在处理新闻URL时,已经写好了新闻路径,调用NewsAction中的hnNews方法。

3、master.com定义新模板hnNews.html 并获得子网站新闻的id,并将id赋值到模板中。

   public function hnNews(){
           $id = intval($_GET['id']);
           $this->assign('id',$id);
           $this->display();
   }

4、在hnNews.html中传递子网站新闻id并跨域获得新闻的标题、内容、发布日期等信息。

<div class="content">
    <div class="content_news_sub">
       <h4 id="jsontitle"></h4>  
       <div class="time_yuan">发布时间:<span id ="jsontime"></span> 来源:<a href="http://slave.com/article/{$id}1.html"  target="_blank" >子网站</a></div>
       <div class="wen" id="jsonbody"></div>
    </div>
</div>
<script type="text/javascript">  
    function jsonpCallback(result) {  
         $("#jsontitle").html(result.title);
         $("#jsontime").html(result.addtime); 
         $("#jsonbody").html(result.body);
    }
 $(function(){
          $("#jsonbody img").each(function(){
            var url = $(this).attr("src");
            $(this).attr("src",'http://slave.com'+url);
       })  
  })//替换新闻内容中的图片路径   
</script>  
<script type="text/javascript" src="http://slave.com/index.php?c=article&a=jsonContent&id={$id}&callback=jsonpCallback"></script>

使用jsonp跨域进行数据交换。

5、在子网站中获得新闻id,查询新闻标题、内容、创建时间、点击量等,返回json数据。在新闻的控制器article中添加的jsonContent方法。

    function jsonContent(){
        $callback=trim($_GET['callback']);  
        $id = intval($_GET['id']);
        $sql='select id,title,addtime,body from '.$this->db.' a left join '.$this->db.'_field b on (a.id=b.aid) where a.id ='.$id;
        $list = $this->Class->findSql($sql); 
        foreach ($list as $k=>$val){
            $arr['title'] = $val['title'];
            $arr['addtime'] = date("Y-m-d",$val['addtime']);
            $arr['body'] = $val['body'];
        }
        $result=json_encode($arr);  
        echo $callback."($result)";  
    }

点击新闻列表,就能查看到子网站新闻信息了。

我这种做法比较偷懒,适合网站流量小的企业站。

posted @ 2015-03-26 13:27  "ωκ"  阅读(137)  评论(0)    收藏  举报