From 4886612f7f844dc6bd3e9c6d041ff63b78b03305 Mon Sep 17 00:00:00 2001 From: amikhaylov Date: Fri, 15 May 2026 13:56:57 +0300 Subject: [PATCH] Added News page --- app/Http/Controllers/GigsController.php | 3 +- app/Http/Controllers/NewsController.php | 26 +++++++++ app/Models/Loaders/NewsLoader.php | 18 ++++++ app/Models/ORM/News.php | 11 ++++ app/Views/NewsView.php | 73 +++++++++++++++++++++++++ resources/views/band.blade.php | 2 +- resources/views/main.blade.php | 2 +- resources/views/news.blade.php | 39 +++++++++++++ routes/web.php | 2 + 9 files changed, 172 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/NewsController.php create mode 100644 app/Models/Loaders/NewsLoader.php create mode 100644 app/Models/ORM/News.php create mode 100644 app/Views/NewsView.php create mode 100644 resources/views/news.blade.php diff --git a/app/Http/Controllers/GigsController.php b/app/Http/Controllers/GigsController.php index 9610702..0faaf4d 100644 --- a/app/Http/Controllers/GigsController.php +++ b/app/Http/Controllers/GigsController.php @@ -9,13 +9,12 @@ class GigsController extends Controller public function __construct( private GigsLoader $loader, ) { - + $this->addCssFile('gigs.css'); } public function index() { $events = $this->loader->getEvents(); - $this->addCssFile('gigs.css'); return $this->render('gigs') ->with(compact('events')); diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php new file mode 100644 index 0000000..b6f1942 --- /dev/null +++ b/app/Http/Controllers/NewsController.php @@ -0,0 +1,26 @@ +addCssFile('news.css'); + } + + public function index() + { + $news = $this->newsLoader->getNews(); + $this->view->prepareData($news); + + + return $this->render('news') + ->with(compact('news')); + } +} diff --git a/app/Models/Loaders/NewsLoader.php b/app/Models/Loaders/NewsLoader.php new file mode 100644 index 0000000..6b81e80 --- /dev/null +++ b/app/Models/Loaders/NewsLoader.php @@ -0,0 +1,18 @@ +limit($limit) + ->offset($offset) + ->get(); + + return $data ? $data->toArray() : []; + } +} diff --git a/app/Models/ORM/News.php b/app/Models/ORM/News.php new file mode 100644 index 0000000..98f48e1 --- /dev/null +++ b/app/Models/ORM/News.php @@ -0,0 +1,11 @@ +",$text); + $short = array_slice($tmp,0,1); + + return implode("
",$short); + } + + public function longBody(string $text): string + { + $tmp = explode("
",$text); + $long = array_slice($tmp,1); + + return implode("
",$long); + } + + public function prepareData(array &$data): void + { + foreach($data as $index => $row) { + if($row['author_type'] === 0) { + $keyword = "club"; + } else { + $keyword = "id"; + } + + if($row['post_type'] === "copy") { + $data[$index]['author_link'] = sprintf("%s/%s%d", self::VK_LINK, $keyword, $row['author']); + $data[$index]['article_link'] = sprintf("%s/%s%d?w=wall%d_%d", + self::VK_LINK, $keyword, $row['author'], $row['author'], $row['copy_post_id'] + ); + } else { + $data[$index]['author_link'] = sprintf("%s/%s%d", self::VK_LINK, $keyword, $row['author']); + $data[$index]['article_link'] = sprintf("%s/%s%d?w=wall%d_%d", + self::VK_LINK, $keyword, $row['author'], $row['author'], $row['id'] + ); + } + + $data[$index]['body1'] = $this->convertMediaLinks($this->shortBody($row['article'])); + $data[$index]['body2'] = $this->convertMediaLinks($this->longBody($row['article'])); + } + } + + private function cleanBreaks(string $text): string + { + return str_replace("

", "
", $text); + } + + public function convertMediaLinks(string $link): string + { + $pattern = '/(http|https):\/\/(\S+)/i'; + $replacement = '$0'; + $res = preg_replace($pattern,$replacement,$link); + + $pattern = '/\[([^\[\]\|]+)\|([^\[\]\|]+)\]/i'; + $replacement = sprintf('$2', self::VK_LINK); + $res = preg_replace($pattern,$replacement,$res); + + #https://vk.com/feed?q=%23ledstarband§ion=search + $pattern = '/\#(\S+)/i'; + $replacement = '$0'; + $res = preg_replace($pattern, $replacement, $res); + + return $res; + } +} diff --git a/resources/views/band.blade.php b/resources/views/band.blade.php index 91a0b8b..8168792 100644 --- a/resources/views/band.blade.php +++ b/resources/views/band.blade.php @@ -24,6 +24,6 @@ @section('breadcrump') @endsection diff --git a/resources/views/main.blade.php b/resources/views/main.blade.php index c10e14f..4ea3870 100644 --- a/resources/views/main.blade.php +++ b/resources/views/main.blade.php @@ -23,7 +23,7 @@
@include('include.menu')
@yield('content')
-
@include('include.footer')
+
@include('include.footer')
content
@foreach($js_files as $js) diff --git a/resources/views/news.blade.php b/resources/views/news.blade.php new file mode 100644 index 0000000..ae55671 --- /dev/null +++ b/resources/views/news.blade.php @@ -0,0 +1,39 @@ +@extends('main') +@section('title', 'Новости') +@section('content') +
+ + + @foreach($news as $record) +
+ +
+ +
+
{!! $record['body1'] !!}
+ + +
+
+
+
+ @endforeach + +
+@endsection + +@section('breadcrump') + +@endsection diff --git a/routes/web.php b/routes/web.php index 1a09e9e..47013c5 100755 --- a/routes/web.php +++ b/routes/web.php @@ -6,12 +6,14 @@ use App\Http\Controllers\RiderController; use App\Http\Controllers\PlaylistController; use App\Http\Controllers\BandController; use App\Http\Controllers\GigsController; +use App\Http\Controllers\NewsController; Route::get('/', [MainController::class, 'index']); Route::get('/rider', [RiderController::class, 'index']); Route::get('/playlist', [PlaylistController::class, 'index']); Route::get('/band', [BandController::class, 'index']); Route::get('/gigs', [GigsController::class, 'index']); +Route::get('/news', [NewsController::class, 'index']); /** * Доделать остальные маршруты