2023-06-08 12:57:51 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Fo;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
use App\Models\News;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
|
|
|
|
|
|
class NewsController extends Controller
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* News index
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse
|
|
|
|
|
*/
|
|
|
|
|
public function index(Request $request)
|
|
|
|
|
{
|
|
|
|
|
if ($request->wantsJson()) {
|
|
|
|
|
$currentLocale = app()->currentLocale();
|
|
|
|
|
$newsList = News::query()
|
|
|
|
|
->where('status', true)
|
|
|
|
|
->whereJsonContains('locales', $currentLocale)
|
|
|
|
|
->orderBy('order')
|
|
|
|
|
->paginate();
|
|
|
|
|
return \response()->json(\collect($newsList->items())
|
2024-06-17 15:21:29 +02:00
|
|
|
->map(fn ($newsModel) => str($this->renderNews($newsModel))->toBase64()));
|
2023-06-08 12:57:51 +02:00
|
|
|
}
|
|
|
|
|
return view('fo.pages.news.index');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Product show
|
|
|
|
|
*
|
|
|
|
|
* @param \App\Models\News $publishedNews
|
|
|
|
|
* @return \Illuminate\Contracts\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function show(News $publishedNews)
|
|
|
|
|
{
|
2023-06-08 17:50:21 +02:00
|
|
|
$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
|
|
|
|
|
]);
|
2023-06-08 12:57:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Render a news for JS usage (ajax)
|
|
|
|
|
*
|
|
|
|
|
* @param \App\Models\News $newsModel
|
|
|
|
|
* @return string Base64 rendered view.
|
|
|
|
|
*/
|
|
|
|
|
private function renderNews(News $newsModel): string
|
|
|
|
|
{
|
2024-06-17 15:21:29 +02:00
|
|
|
$locale = \app()->currentLocale();
|
|
|
|
|
$pictures = $newsModel->picture_list;
|
2023-06-08 12:57:51 +02:00
|
|
|
return Cache::remember(
|
|
|
|
|
"NewsRendered_{$locale}_{$newsModel->id}_{$newsModel->updated_at}",
|
|
|
|
|
60,
|
2024-06-17 15:21:29 +02:00
|
|
|
fn () => \view(
|
|
|
|
|
'fo.pages.news.bloc',
|
|
|
|
|
[
|
|
|
|
|
'newsModel' => $newsModel,
|
|
|
|
|
'pictures' => $pictures
|
|
|
|
|
]
|
|
|
|
|
)->render()
|
2023-06-08 12:57:51 +02:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|