ArticleController.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Http\Controllers\Home\Blog;
  3. use App\Models\Blog\Article;
  4. use App\Models\Blog\ArticleTag;
  5. use App\Models\Blog\Category;
  6. use App\Models\Blog\Tag;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\Auth;
  10. class ArticleController extends CommonController
  11. {
  12. //
  13. public function index(Request $request)
  14. {
  15. $size = 20;
  16. $data = Article::with('category:id,cate_name')
  17. ->select( 'cate_id', 'slug', 'title', 'read_count', 'created_at', 'is_top', 'description')
  18. ->orderByDesc('is_top')->orderByDesc('created_at');
  19. if (isset($request->id)) {
  20. $data = $data->where('id', '=', $request->id);
  21. }
  22. if (isset($request->name)) {
  23. $data = $data->where('name', 'like', '%' . $request->name . '%');
  24. }
  25. if (isset($request->start_at) && isset($request->end_at)) {
  26. $data = $data->whereBetween('created_at', array($request->start_at, $request->end_at));
  27. }
  28. $data = $data->paginate($size)->toArray();
  29. $this->sidebar($data);
  30. return view('home.index', $data);
  31. }
  32. public function show($slug)
  33. {
  34. $article = Article::with('category:id,cate_name')
  35. ->select( 'id', 'cate_id', 'slug', 'title', 'read_count', 'created_at', 'is_top', 'description', 'markdown', 'keywords')
  36. ->where('slug', '=', $slug)->first();
  37. if (!$article) {
  38. return view('errors.404');
  39. }
  40. $article->increment("read_count");
  41. $tags = ArticleTag::query()
  42. ->select('blog_tags.tag_name')
  43. ->where('article_id', '=', $article->id)
  44. ->leftJoin('blog_tags', 'blog_article_tags.tag_id', 'blog_tags.id')
  45. ->get();
  46. $article = $article->toArray();
  47. $article['markdown'] = markdown($article['markdown']);
  48. $data['article'] = $article;
  49. $data['article']['tags'] = $tags->toArray();
  50. $data['guess_you_like_articles'] = $this->guessYouLikeArticles($article['cate_id'], $slug);
  51. $this->sidebar($data);
  52. return view('home.blog.article.index', $data);
  53. }
  54. /* guess you like*/
  55. protected function guessYouLikeArticles($cate_id, $slug)
  56. {
  57. $articles = Article::query()
  58. ->select('slug', 'title', 'read_count', 'description')
  59. ->where('cate_id', '=', $cate_id)
  60. ->where('slug', '!=', $slug)
  61. ->inRandomOrder()
  62. ->limit(8)->get();
  63. return $this->parseToArray($articles);
  64. }
  65. }