| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 | 
							- <?php
 - 
 - namespace App\Http\Controllers\Api;
 - 
 - use App\Http\Controllers\Controller;
 - use App\Models\News;
 - use App\Models\NewsCategory;
 - use App\Supports\Response;
 - use Carbon\Carbon;
 - use Illuminate\Http\Request;
 - use Illuminate\Support\Facades\DB;
 - use Illuminate\Support\Facades\Log;
 - use App\Http\Helper\Helper;
 - 
 - /**
 -  * @group Lottery Prize
 -  */
 - class NewsController extends Controller
 - {
 -     public function __construct(
 -     )
 -     {
 -     }
 - 
 -     public function list(Request $request, $locate = 'tw')
 -     {
 -         $categoryId = $request->input("categoryId", "");
 -         $page = $request->input("page", 1);
 -         $per_page = $request->input("per_page", 15);
 -         $locate = $locate == "tw" ? "zh_TW" : $locate;
 -         $result = [];
 - 
 -         //年份清單
 -         $yearList = News::select(DB::raw("DATE_FORMAT(post_date, '%Y') as years"))->distinct()->orderBy("years", "desc")->pluck("years");
 -         $result["yearList"] = $yearList;
 - 
 -         //文章列表
 -         $news = News::where("visible", 1);
 -         if($categoryId){
 -             $news->where("news_category_id", $categoryId);
 -         }
 -         $news = $news->orderByDesc("order")->orderByDesc("post_date");
 -         $result["pagination"] = [
 -             "page" => $page,
 -             "per_page" => $per_page
 -         ];
 -         if($per_page == -1){
 -             $news = $news->get();
 -             $result["pagination"]["total"] = $news->count();
 -             $result["pagination"]["total_page"] =1;
 -         }else{
 -             $news = $news->paginate($per_page, ['*'], 'page', $page);
 -             $result["pagination"]["total"] = $news->total();
 -             $result["pagination"]["total_page"] =$news->lastPage();
 - 
 -         }
 -         foreach($news as $item){
 -             $result["list"][] = [
 -                 "id" => $item->id,
 -                 "categoryId" => $item->newsCategory->id,
 -                 "category" => $item->newsCategory->getTranslation("name", $locate),
 -                 "postDate" => Carbon::parse($item->post_date)->format("Y.m.d"),
 -                 "title" => $item->getTranslation("title", $locate),
 -                 "imgPC" => $item->news_img_pc_url,
 -                 "imgMobile" => $item->news_img_mobile_url,
 -                 "written" => $item->getTranslation("written_by", $locate),
 -                 "description" => $item->getTranslation("description", $locate),
 -             ];
 -         }
 -         return response()->json(["data" => $result], 200);
 -     }
 - 
 -     public function getTop(Request $request, $locate = 'tw')
 -     {
 -         $categoryId = $request->input("categoryId", "");
 -         $locate = $locate == "tw" ? "zh_TW" : $locate;
 -         $result = [];
 - 
 -         //年份清單
 -         $yearList = News::select(DB::raw("DATE_FORMAT(post_date, '%Y') as years"))->distinct()->orderBy("years", "desc")->pluck("years");
 - 
 -         //文章列表
 -         $news = News::where("visible", 1);
 -         if($categoryId){
 -             $news->where("news_category_id", $categoryId);
 -         }
 -         $news = $news->where('on_top', 1)->first();
 -         $result["data"] = [
 -             "meta" => [
 -                 "meta_title" => $news->getTranslation("meta_title", $locate),
 -                 "meta_keyword" => $news->getTranslation("meta_keyword", $locate),
 -                 "meta_description" => $news->getTranslation("meta_description", $locate),
 -                 "imgPC" => $news->news_meta_img,
 -             ],
 -             "yearList" =>[
 -                 $yearList
 -             ],
 -             "top" => [
 -                 "id" => $news->id,
 -                 "categoryId" => $news->newsCategory->id,
 -                 "category" => $news->newsCategory->getTranslation("name", $locate),
 -                 "postDate" => Carbon::parse($news->post_date)->format("Y/m/d"),
 -                 "title" => $news->getTranslation("title", $locate),
 -                 "imgPC" => $news->news_img_pc_url,
 -                 "imgMobile" => $news->news_img_mobile_url,
 -                 "written" => $news->getTranslation("written_by", $locate),
 -                 "description" => $news->getTranslation("description", $locate),
 -             ]
 -         ];
 -         return response()->json($result, 200);
 -     }
 - 
 -     public function detail($locale = 'tw', $id){
 -         $locate = $locale == "tw" ? "zh_TW" : $locale;
 -         $news = News::find($id);
 -         $otherNewsList = [];
 - 
 -         //取得前一篇
 -         $previous = News::where(function ($query) use ($news) {
 -             $query->where('order', $news->order)
 -             ->where('post_date', $news->post_date)
 -             ->where('id', '>', $news->id);
 -         })
 -         ->orWhere(function ($query) use ($news) {
 -             $query->where('order', $news->order)
 -             ->where('post_date', '>', $news->post_date);
 -         })
 -         ->orWhere(function ($query) use ($news) {
 -             $query->where('order', '>', $news->order);
 -         })
 -         ->orderBy('order', 'asc')
 -         ->orderBy('post_date', 'asc')
 -         ->orderBy('id', 'asc')
 -         ->first();
 -         //取得下一篇
 -         $next = News::where(function ($query) use ($news) {
 -             $query->where('order', $news->order)
 -             ->where('post_date', $news->post_date)
 -             ->where('id', '<', $news->id);
 -         })
 -         ->orWhere(function ($query) use ($news) {
 -             $query->where('order', $news->order)
 -             ->where('post_date', '<', $news->post_date);
 -         })
 -         ->orWhere(function ($query) use ($news) {
 -             $query->where('order', '<', $news->order);
 -         })
 -         ->orderBy('order', 'desc')
 -         ->orderBy('post_date', 'desc')
 -         ->orderBy('id', 'desc')
 -         ->first();
 -         if($previous)$otherNewsList["previous"] = [
 -             "id" => $previous->id,
 -             "categoryId" => $previous->newsCategory->id,
 -             "category" => $previous->newsCategory->getTranslation("name", $locate),
 -             "postDate" => Carbon::parse($previous->post_date)->format("Y/m/d"),
 -             "title" => $previous->getTranslation("title", $locate),
 -             "imgPC" => $previous->news_img_pc_url,
 -             "imgMobile" => $previous->news_img_mobile_url,
 -             "written" => $previous->getTranslation("written_by", $locate),
 -             "description" => $previous->getTranslation("description", $locate),
 -         ];
 -         if($next)$otherNewsList["next"] = [
 -             "id" => $next->id,
 -             "categoryId" => $next->newsCategory->id,
 -             "category" => $next->newsCategory->getTranslation("name", $locate),
 -             "postDate" => Carbon::parse($previous->post_date)->format("Y/m/d"),
 -             "title" => $next->getTranslation("title", $locate),
 -             "imgPC" => $next->news_img_pc_url,
 -             "imgMobile" => $next->news_img_mobile_url,
 -             "written" => $next->getTranslation("written_by", $locate),
 -             "description" => $next->getTranslation("description", $locate),
 -         ];
 - 
 - 
 -         $paragraphs = [];
 -         foreach($news->paragraphs as $paragraph){
 -             $paragraphs[] = [
 -                 "type" => $paragraph->contentType(),
 -                 "imgUrl" => $paragraph->paragraph_img,
 -                 "imgOutLink" => $paragraph->image_link,
 -                 "alt" => $paragraph->getTranslation("image_alt", $locate),
 -                 "content" => nl2br($paragraph->getTranslation("text_content", $locate)),
 -                 "videoImg" => $paragraph->paragraph_video_img,
 -                 "videoType" => $paragraph->paragraph_video_type,
 -                 "link" => $paragraph->paragraph_video_url,
 -             ];
 -         }
 -         $extraPhotos = [];
 -         foreach($news->photos as $photo){
 -             $extraPhotos[] = [
 -                 "imgUrl" => $photo->news_photo_img,
 -                 "imgOutLink" => $photo->image_link,
 -             ];
 -         }
 -         $result = [
 -             "categoryId" => $news->newsCategory->id,
 -             "category" => $news->newsCategory->getTranslation("name", $locate),
 -             "postDate" => Carbon::parse($news->post_date)->format("Y/m/d"),
 -             "title" => $news->getTranslation("title", $locate),
 -             "description" => $news->getTranslation("description", $locate),
 -             "written" => $news->getTranslation("written_by", $locate),
 -             "imgPC" => $news->news_img_pc_url,
 -             "imgMobile" => $news->news_img_mobile_url,
 -             "metaTitle" => $news->getTranslation("meta_title", $locate),
 -             "metaKeyword" => $news->getTranslation("meta_keyword", $locate),
 -             "metaDesc" => $news->getTranslation("meta_description", $locate),
 -             "metaImg" => $news->meta_img,
 -             "paragraphs" => $paragraphs,
 -             "photos" => $extraPhotos,
 -             "otherNews" => $otherNewsList
 -         ];
 -         return response()->json(["data" => $result], 200);
 -     }
 - }
 
 
  |