NewsController.php 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\News;
  5. use App\Models\NewsCategory;
  6. use App\Supports\Response;
  7. use Carbon\Carbon;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\Log;
  11. use App\Http\Helper\Helper;
  12. /**
  13. * @group Lottery Prize
  14. */
  15. class NewsController extends Controller
  16. {
  17. public function __construct(
  18. )
  19. {
  20. }
  21. public function list(Request $request, $locate = 'tw')
  22. {
  23. $locate = $locate == "tw" ? "zh_TW" : $locate;
  24. $request_ordering = $request->ordering ?? "desc";
  25. $result = [];
  26. //年份清單
  27. //置頂影音
  28. $result["top"] = [];
  29. $top = News::where("visible", 1)->where("on_top", 1)->first();
  30. if(!empty($top->id))
  31. $result["top"][] = [
  32. "id" => $top->id,
  33. "categoryId" => $top->news_category_id,
  34. "category" => $top->newsCategory->getTranslation("name", $locate),
  35. "postDate" => Carbon::parse($top->post_date)->format("Y/m/d"),
  36. "title" => $top->getTranslation("title", $locate),
  37. "imgUrl" => $top->news_img_url,
  38. "imgAlt" => $top->getTranslation("news_img_alt", $locate),
  39. ];
  40. //文章列表
  41. $news = News::where("visible", 1)->where("on_top", 0);
  42. $news = $news->orderBy("post_date", $request_ordering)->get();
  43. foreach($news as $item){
  44. $result["list"][] = [
  45. "id" => $item->id,
  46. "categoryId" => $item->news_category_id,
  47. "category" => $item->newsCategory->getTranslation("name", $locate),
  48. "postDate" => Carbon::parse($item->post_date)->format("Y/m/d"),
  49. "title" => $item->getTranslation("title", $locate),
  50. "imgUrl" => $item->news_img_url,
  51. "imgAlt" => $item->getTranslation("news_img_alt", $locate),
  52. ];
  53. }
  54. return Response::ok($result);
  55. }
  56. public function detail($locale = 'tw', $id){
  57. $locate = $locale == "tw" ? "zh_TW" : $locale;
  58. $news = News::find($id);
  59. $paragraphs = [];
  60. foreach($news->paragraphs as $paragraph){
  61. $paragraphs[] = [
  62. "type" => $paragraph->contentType(),
  63. "imgUrl" => $paragraph->paragraph_img,
  64. "alt" => $paragraph->getTranslation("img_alt", $locate),
  65. "imgOutLink" => $paragraph->image_link,
  66. "content" => nl2br($paragraph->getTranslation("text_content", $locate)),
  67. ];
  68. }
  69. //瀏覽更多
  70. $otherNewsList = [];
  71. $getRangeIds = News::where("visible", 1)->orderByDesc("post_date")->pluck("id")->toArray();
  72. $helper = new Helper();
  73. $otherNewsIds = $helper->findArrayTargetIndex($getRangeIds, $id, [-1, 1]);
  74. $otherNews = News::whereIn('id', $otherNewsIds)->get();
  75. foreach($otherNews as $item){
  76. $otherNewsList[] = [
  77. "id" => $item->id,
  78. "categoryId" => $item->newsCategory->id,
  79. "category" => $item->newsCategory->getTranslation("name", $locate),
  80. "postDate" => Carbon::parse($item->post_date)->format("Y.m.d"),
  81. "title" => $item->getTranslation("title", $locate),
  82. "imgUrl" => $item->news_img_url,
  83. "imgAlt" => $item->getTranslation("news_img_alt", $locate),
  84. "written" => $item->getTranslation("written_by", $locate),
  85. "description" => $item->getTranslation("description", $locate),
  86. ];
  87. }
  88. $result = [
  89. "id" => $news->id,
  90. "categoryId" => $news->newsCategory->id,
  91. "category" => $news->newsCategory->getTranslation("name", $locate),
  92. "postDate" => Carbon::parse($news->post_date)->format("Y.m.d"),
  93. "title" => $news->getTranslation("title", $locate),
  94. "imgUrl" => $item->news_img_url,
  95. "imgAlt" => $item->getTranslation("news_img_alt", $locate),
  96. "written" => $news->getTranslation("written_by", $locate),
  97. "description" => $news->getTranslation("description", $locate),
  98. "metaTitle" => $news->getTranslation("meta_title", $locate),
  99. "metaKeyword" => $news->getTranslation("meta_keyword", $locate),
  100. "metaDesc" => $news->getTranslation("meta_description", $locate),
  101. "metaImg" => $news->meta_img,
  102. "paragraphs" => $paragraphs,
  103. "otherNews" => $otherNewsList
  104. ];
  105. return Response::ok($result);
  106. }
  107. }