wantsJson()) { $currentLocale = app()->currentLocale(); $newsList = News::query() ->where('status', true) ->whereJsonContains('locales', $currentLocale) ->orderBy('order') ->paginate(); return \response()->json(\collect($newsList->items()) ->map(fn ($newsModel) => $this->renderNews($newsModel))); } return view('fo.pages.news.index'); } /** * Product show * * @param \App\Models\News $publishedNews * @return \Illuminate\Contracts\View\View */ public function show(News $publishedNews) { $currentLocale = app()->currentLocale(); $relatedNewsList = News::query() ->where('id', '!=', $publishedNews->id) ->where('status', true) ->whereJsonContains('locales', $currentLocale) ->orderBy('order', 'DESC') ->limit(2)->get(); return view('fo.pages.news.show', [ 'newsModel' => $publishedNews, 'relatedNewsList' => $relatedNewsList ]); } /** * Render a news for JS usage (ajax) * * @param \App\Models\News $newsModel * @return string Base64 rendered view. */ private function renderNews(News $newsModel): string { $locale = \app()->currentLocale(); return Cache::remember( "NewsRendered_{$locale}_{$newsModel->id}_{$newsModel->updated_at}", 60, function () use ($newsModel) { $pictures = $newsModel->picture_list; return \base64_encode(\view( 'fo.pages.news.bloc', [ 'newsModel' => $newsModel, 'pictures' => $pictures ] )->render()); } ); } }