1.需求描述php
首頁文章列表,須要同時獲取文章的點贊和被關注數,同時若是被當前用戶點贊或關注了會顯示相應小圖標進行區別。圖示以下:數據庫
2.解決方案cookie
數據庫設計:框架
文章對應Article表,其中包括收藏數字段fav,點贊數字段zan數據庫設計
中間表user_fav,user_zan分別表示某一用戶對某篇文章的點贊與收藏, 其中包括userid,usertype,article_id等字段fetch
TP5代碼實現部分:this
框架用的TP5,參考開發手冊其中關聯模型部分,在article模型中增長userFav和userZan方法spa
public function userFav() { return $this->hasMany('UserFav','article_id')->field('userid'); } public function userZan() { return $this->hasMany('UserZan','article_id')->field('userid'); }
Controller中index方法顯示文章列表設計
public function index($page=1) { // $this->articlemodel = new Article(); // $list = $this->articlemodel->where('schoolid',$user['schoolid'])->where('classid',$user['classid'])->group('create_time')->select(); $list = $this->articlemodel->withCount(['userzan'=>function($query){ $query->where('userid',cookie('userid'))->where('usertype',cookie('usertype')); }])->order('zan desc,is_top desc,is_recommend desc,id desc')->paginate(5,false,['page' => $page]); $this->assign('list', $list); return $this->fetch(); }
View中獲取點贊數關注數同時判斷若是當前用戶點贊,部分代碼code
{volist name="list" id="vo"} <div class="in_parent"> <img src="{$vo['photo'][0]}" data-id="{$vo['id']}"> <div class="in_par_con"> <p>{$vo.title}</p> </div> <div class="in_par_con"> {foreach :explode(',',$vo['tags']) as $tag} <span>{$tag}</span> {/foreach} </div> <div class="in_per"> <div class="in_per_lf fl"> <img src="__H5IMAGES__/pic.png" class="fl"/> <div class="fl ml5 mt10">{$vo.author}<p class="gray">{php}echo date('Y-m-d',strtotime($vo['create_time']));{/php}</p></div> </div> <div class="in_per_rt fr"> <span class="gray fr mt30 ml3 care-val">收藏 {$vo.fav}</span> <div class="fr mt30 ml3 care{eq name='$vo.userfav_count' value='1'} care01{/eq}" data-id="{$vo.id}"></div> <span class="gray fr mt30 ml3 zan-val">{$vo.zan}</span> <div class="fr mt30 ml3 zan{eq name='$vo.userzan_count' value='1'} zan01{/eq}" data-id="{$vo.id}"></div> </div> <div class="clear"></div> </div> </div> {/volist}
php用的時間不長,用的不對的地方望不吝賜教