周梦康 发表于 2014-08-31 4774 次浏览 标签 : ThinkSNS

发微博流程

1.ajax请求index.php?app=public&mod=Feed&act=PostFeed。例如发送的是一个视频微博,post的数据为:

array(
	'body'=>'MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html',
	'type'=>'postvideo',
	'app_name'=>'public',
	'content'=>'',
	'attach_id'=>'',
	'videourl'=>'http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html',
	'channel_id'=>''
)

2.将post过来的数据通过model('Feed')->put($this->uid,$app,$type,$d);

感觉这里官方代码写的有点不太好,居然是在这里面的put()方法去完成对postvideo类型数据的再次处理,这样容易让人产生错觉,觉得如果我新增一种类型,对其数据的整合也需要在这里面写(其实可以在外面写),而这个方法的本意就是存数据,而不不是再次整合资源的数据。放到Feed::PostFeed也不好,毕竟那边是专门接受表单数据的,应该在FeedModel里面在开辟新的方法来专门调用对各种不通类型数据处理的方法。纯个人意见,这样put()的单一职责就清晰了很多。

3.将数据写入feed表和feed_data表。

$feed_id =  $this->data($data)->add();//写入feed表
$feed_data = D('FeedData')->data(array('feed_id'=>$feed_id,'feed_data'=>serialize($data),'client_ip'=>get_client_ip(),'feed_content'=>$data['body']))->add();//写入feed_data表

这里序列化存入feed_data的数据为:

array (
  'content' => 'MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看http:',
  'body' => 'MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html',
  'source_url' => '',
  'attach_id' => '',
  'uid' => 1,
  'app' => 'public',
  'type' => 'postvideo',
  'app_row_id' => 0,
  'app_row_table' => 'feed',
  'publish_time' => 1409454082,
  'from' => '0',
  'repost_count' => 0,
  'comment_count' => 0,
  'is_del' => 0,
  'is_repost' => 0,
  'is_audit' => 1,
  'flashvar' => 'http://player.youku.com/player.php/sid/XNjI4NTUyMDIw/v.swf',
  'flashimg' => 'http://g4.ykimg.com/1100401F465271E1AF84A103EB32883DDB8BFB-A94C-FC92-A869-2B20F2432E59',
  'host' => 'youku.com',
  'source' => 'http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html',
  'title' => 'MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看',
)

其他的加积分,转发提醒什么的,也没细想,本次的主体逻辑是搞明白,微博的写和读。

读微博流程

从下拉加载的ajax请求来看index.php?app=widget&mod=FeedList&act=loadMore,下面是调用关系:

$content = $this->getData($_REQUEST,'_FeedList.html');

$list = model('Feed')->getList($where,10);
还是走到FeedModel通过getList()->getFeeds()->setFeedCache()->__paseTemplate()一路调用,最后终于到微博主体内容模板的套用啦

$feed_template_file = APPS_PATH.'/'.$_data['app'].'/Conf/'.$_data['type'].'.feed.php';
//视频的就找postvideo.feed.php模板

上面发的视频的内容最后解析到_FeedList.html的微博主体中就变成了

MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看<div class="url"><a href="http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html" target="_blank" event-node="show_url_detail" class="ico-url-video"></a><div class="url-detail" style="display:none;">http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html</div></div>			<br/>
			<div class="feed_img" id="video_mini_show_23">
        <a href="javascript:void(0);" onclick="switchVideo(23,'open','youku.com','http://player.youku.com/player.php/sid/XNjI4NTUyMDIw/v.swf')">
          <img src="http://g4.ykimg.com/1100401F465271E1AF84A103EB32883DDB8BFB-A94C-FC92-A869-2B20F2432E59" style="width:150px;height:113px;overflow:hidden" />
        </a>
        <div class="video_play" ><a href="javascript:void(0);" onclick="switchVideo(23,'open','youku.com','http://player.youku.com/player.php/sid/XNjI4NTUyMDIw/v.swf')">
            <img src="http://chanpingou.com/addons/theme/stv1/_static/image/feedvideoplay.gif" ></a>
        </div>
    </div>
    <div class="feed_quote" style="display:none;" id="video_show_23"> 
      <div class="q_tit">
        <img class="q_tit_l" onclick="switchVideo(23,'open','youku.com','http://player.youku.com/player.php/sid/XNjI4NTUyMDIw/v.swf')" src="http://chanpingou.com/addons/theme/stv1/_static/image/zw_img.gif" />
      </div>
      <div class="q_con"> 
        <p style="margin:0;margin-bottom:5px" class="cGray2 f12">
        <a href="javascript:void(0)" onclick="switchVideo(23,'close')" class="ico-pack-up">收起</a>
        &nbsp;&nbsp;|&nbsp;&nbsp;
        <a href="http://v.youku.com/v_show/id_XNjI4NTUyMDIw.html" target="_blank">
          <i class="ico-show-all"></i>MIC ::无锡江南大学官方活动视频—在线播放—优酷网,视频高清在线观看</a>
        </p>
        <div id="video_content_23"></div>
      </div>
      <div class="q_btm"><img class="q_btm_l" src="http://chanpingou.com/addons/theme/stv1/_static/image/zw_img.gif" /></div>
    </div>

转发微博流程

转发的时候请求的地址是index.php?app=public&mod=Feed&act=shareFeed

发送数据的键值对大致如下:

body: 内容
type:feed
app_name:public
sid:29
content:
comment:0
curid:31
curtable:feed

然后调用ShareModel再层层调用,最后找到原微博的数据

//调用分享的model
model('Share')->shareFeed($post, 'share');
//获取原微博的数据
model('Source')->getSourceInfo($type, $data['sid'], $forApi, $data['app_name'])
//再去feedModel里去获取数据
$info = model ( 'Feed' )->getFeedInfo ( $row_id, $forApi );

评论列表