天天看點

基于laravel開發的多使用者部落格系統(三)

本篇主要介紹開發過程中的小結和關鍵代碼:

小結:由于對laravel不熟,開發過程中遇到問題,百度基本上沒有答案,沒有辦法隻好找文檔解決,開發過程中有些規範不是很到位,比如模闆頁@yield('main');等模闆繼承之類的沒有使用,【習慣了zencoding生成】,php atisan migrate 指令生成表單也用的少,表單大部分是手動建立的,第三方插件用的也不多,太亂了,可能還沒有體會到laravel的精妙之處吧,以後慢慢适應。

部分代碼:

計算部落格日期:

  /**
     * @日期計算函數
     */

   private  function  formatTime($time){
        $t=time()-strtotime($time);
        if($t<0){
            return false;
        }

        switch ($t){
            case $t<60:return $t.'秒前';break;
            case $t>=60 && $t<3600:return floor($t/60).'分鐘前';break;
            case $t>=3600 && $t<86400:return floor($t/3600).'小時前';break;
            case $t>=86400 && $t<604800:return floor($t/86400).'天前';break;
            case $t>=604800 && $t<2419200:return floor($t/604800).'周前';break;
            case $t>=2419200 && $t<29030400:return floor($t/2419200).'月前';break;
            case $t>=29030400:return floor($t/29030400).'年前';break;
            default:return '剛剛';
        }

    }


使用日期格式函數

//擷取部落格建立時間
        $age=$user[0]->created_at;
        $age=$this->formatTime($age);
           

日期歸檔統計:【統計按年月日期如201501,統計該日期下的文章數】

//按日期歸檔
        $date=Article::select(DB::raw("DATE_FORMAT(created_at,'%Y%m') as time,count( DATE_FORMAT(created_at,'%Y%m')) as num"))->where('uid',$uid)->where('status',1)->groupBy('time')->orderBy('created_at','desc')->get();
           

文章分頁:

//查找使用者目前分類下的文章清單,分頁顯示
        $articles=Article::where('cid',$cid)->where('uid',$uid)->where('status',1)->paginate(2);
           

使用者部落格首頁:

/*
     * @使用者部落格首頁
     */
    public  function user($username){
        $uname=strip_tags(trim($username));

        //get每次取多條資料,想取多條用take(n)->get();
        $user=User::whereRaw('username =?',array($uname))->take(0)->get();
       // $user=User::where('username',$uname)->take(0)->get();這種寫法也可以

        //檢查使用者是否存在
        if(count($user)==0){
            return Response::make('user not exist',404);
        }

        $uid= $user[0]->id;

       //擷取目前使用者的全部文章清單,分頁顯示
        $articles=Article::where('uid',$uid)->where('status',1)->paginate(5);


        //擷取文章标簽清單[通過uid查找]
        $tags=Tag::where('uid',$uid)->groupBy('tag')->get();

        //擷取目前使用者文章的總數
        $total=Article::where('uid',$uid)->where('status',1)->count();

        //擷取目前使用者分類總數
        $cates= User::find($uid)->getCate;//關聯模型擷取cate

        //擷取部落格建立時間
        $age=$user[0]->created_at;
        $age=$this->formatTime($age);

        //按日期歸檔
        $date=Article::select(DB::raw("DATE_FORMAT(created_at,'%Y%m') as time,count( DATE_FORMAT(created_at,'%Y%m')) as num"))->where('uid',$uid)->where('status',1)->groupBy('time')->orderBy('created_at','desc')->get();

        return View::make('blog.user', compact('articles'))->with('tags',$tags)->with('user',$user[0])->with('count',count($articles))->with('total',$total)
            ->with('cates',$cates)->with('age',$age)->with('date',$date);

    }
           

關聯模型使用:

比如文章和文章分類是hasOne的關系,文章和文章下的标簽是hasMany的關系:

關聯模型需要在model中聲明,使用的時候以執行個體化對象的屬性的方式擷取:

下面是Article的關聯模型定義:

use Illuminate\Database;
    class Article extends Eloquent{
        protected $fillable = array('title', 'text','author','brief','uid','cid','status');

        public function getCate(){
            return $this->hasOne('Cate','id','cid');//cate表的id=articles表的cid
        }

        public function getTags(){
            return $this->hasMany('Tag','aid','id');//tags表中的aid=articles表的id
        }
    }
           

使用關聯模型:

$article=Article::find($id);
//擷取目前文章的分類,和所屬标簽
$cate=$article->getCate;
//擷取目前文章所屬的标簽
$tags=$article->getTags;