发微博流程
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> | <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 );