From d5ace86b61493d4bc0595e44b31c2ad3f9c730f1 Mon Sep 17 00:00:00 2001 From: aslan Date: Wed, 20 Mar 2024 13:09:39 +0300 Subject: [PATCH] add news --- app/Http/Controllers/NewsController.php | 61 ++++++++++ app/Http/Requests/admin/StoreNewsRequest.php | 22 ++++ app/Http/Requests/admin/UpdateNewsRequest.php | 21 ++++ app/Models/News.php | 19 ++++ database/factories/NewsFactory.php | 18 +++ .../2024_03_20_070333_create_news_table.php | 30 +++++ database/seeders/NewsSeeder.php | 29 +++++ lang/ru/tooltips.php | 5 + resources/views/admin/news/create.blade.php | 68 ++++++++++++ resources/views/admin/news/edit.blade.php | 52 +++++++++ resources/views/admin/news/index.blade.php | 38 +++++++ resources/views/admin/news/show.blade.php | 13 +++ .../views/layouts/admin_layout.blade.php | 1 + routes/admin.php | 2 + tests/Feature/admin/catalog/NewsTest.php | 104 ++++++++++++++++++ 15 files changed, 483 insertions(+) create mode 100644 app/Http/Controllers/NewsController.php create mode 100644 app/Http/Requests/admin/StoreNewsRequest.php create mode 100644 app/Http/Requests/admin/UpdateNewsRequest.php create mode 100644 app/Models/News.php create mode 100644 database/factories/NewsFactory.php create mode 100644 database/migrations/2024_03_20_070333_create_news_table.php create mode 100644 database/seeders/NewsSeeder.php create mode 100644 resources/views/admin/news/create.blade.php create mode 100644 resources/views/admin/news/edit.blade.php create mode 100644 resources/views/admin/news/index.blade.php create mode 100644 resources/views/admin/news/show.blade.php create mode 100644 tests/Feature/admin/catalog/NewsTest.php diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php new file mode 100644 index 0000000..24437bb --- /dev/null +++ b/app/Http/Controllers/NewsController.php @@ -0,0 +1,61 @@ +sortDesc(); + return view('admin.news.index', compact('news')); + } + + public function create() + { + return view('admin.news.create'); + } + + public function store(StoreNewsRequest $request) + { + $validated = $request->validated(); + $urlPhoto = Storage::put('public', $request->file('photo')); + + $news = new News(); + $news->name = $validated['name']; + $news->text = $validated['text']; + $news->photo = Storage::url($urlPhoto); + $news->save(); + return redirect()->route('news.index'); + } + + public function show(News $news) + { + return view('admin.news.show', compact('news')); + } + + public function edit(News $news) + { + return view('admin.news.edit', compact('news')); + } + + public function update(UpdateNewsRequest $request, News $news) + { + $validated = $request->validated(); + + $news->name = $validated['name']; + $news->text = $validated['text']; + $news->save(); + return redirect()->route('news.index'); + } + + public function destroy(News $news) + { + $news->delete(); + return redirect()->route('news.index'); + } +} diff --git a/app/Http/Requests/admin/StoreNewsRequest.php b/app/Http/Requests/admin/StoreNewsRequest.php new file mode 100644 index 0000000..5f92520 --- /dev/null +++ b/app/Http/Requests/admin/StoreNewsRequest.php @@ -0,0 +1,22 @@ + 'required|string|max:255', + 'text' => 'string', + 'photo' => 'required|file', + ]; + } +} diff --git a/app/Http/Requests/admin/UpdateNewsRequest.php b/app/Http/Requests/admin/UpdateNewsRequest.php new file mode 100644 index 0000000..e72b94f --- /dev/null +++ b/app/Http/Requests/admin/UpdateNewsRequest.php @@ -0,0 +1,21 @@ + 'required|string|max:255', + 'text' => 'string', + ]; + } +} diff --git a/app/Models/News.php b/app/Models/News.php new file mode 100644 index 0000000..468d8a8 --- /dev/null +++ b/app/Models/News.php @@ -0,0 +1,19 @@ + fake()->name(), + 'text' => fake()->text(), + 'photo' => fake()->url(), + ]; + } +} diff --git a/database/migrations/2024_03_20_070333_create_news_table.php b/database/migrations/2024_03_20_070333_create_news_table.php new file mode 100644 index 0000000..f460ac5 --- /dev/null +++ b/database/migrations/2024_03_20_070333_create_news_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('name', 255); + $table->text('text'); + $table->string('photo', 255); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('news'); + } +}; diff --git a/database/seeders/NewsSeeder.php b/database/seeders/NewsSeeder.php new file mode 100644 index 0000000..782967e --- /dev/null +++ b/database/seeders/NewsSeeder.php @@ -0,0 +1,29 @@ +insert([ + [ + 'name' => 'Первая новость', + 'text' => fake()->realText(), + 'photo' => '1', + ], + [ + 'name' => 'Вторая новость', + 'text' => fake()->realText(), + 'photo' => '2', + ], + ]); + } +} diff --git a/lang/ru/tooltips.php b/lang/ru/tooltips.php index cc0cf7f..55ffb99 100644 --- a/lang/ru/tooltips.php +++ b/lang/ru/tooltips.php @@ -82,4 +82,9 @@ return [ 'faculty_id' => 'Поле "Факультет" указывает на привязку к факультету', 'slug' => 'Поле "URL" нужно для отображения в браузере' ], + 'news' => [ + 'name' => 'Поле "Название" - заголовок новости для отображения на сайте', + 'text' => 'Поле "Текст" - текст новости для отображения на сайте', + 'photo' => 'Поле "Путь к фото" - текст новости для отображения на сайте', + ], ]; diff --git a/resources/views/admin/news/create.blade.php b/resources/views/admin/news/create.blade.php new file mode 100644 index 0000000..962687c --- /dev/null +++ b/resources/views/admin/news/create.blade.php @@ -0,0 +1,68 @@ +@php use App\Helpers\PositionHelper; @endphp +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Создать Новость

+ {{ Form::open(['url' => route('news.store'), 'method' => 'POST', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} +
+ +
+ {{ Form::label('name', 'Название', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name')]) }} + * +
+
+ {{ Form::text('name', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name'), 'required']) }} +
+ Поле "Название" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::label('text', 'Текст', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.text')]) }} + * +
+
+ {{ Form::textarea('text', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.text'), 'required']) }} +
+ Поле "Текст" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::label('photo', 'Путь к фото') }} + * +
+
+ {{ Form::file('photo', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.photo'), 'required']) }} +
+ Поле "Путь к фото" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('photo') }} + @endif +
+ +
+ {{ Form::submit('Создать', ['class' => 'btn btn-primary']) }} +
+
+ {{ Form::close() }} +
+
+ @endauth + @include('layouts.bootstrap_validation') +@endsection diff --git a/resources/views/admin/news/edit.blade.php b/resources/views/admin/news/edit.blade.php new file mode 100644 index 0000000..44a900e --- /dev/null +++ b/resources/views/admin/news/edit.blade.php @@ -0,0 +1,52 @@ +@php use App\Helpers\PositionHelper; @endphp +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Изменить Новость

+ {{ Form::open(['url' => route('news.update', $news), 'method' => 'PATCH', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} +
+ +
+ {{ Form::label('name', 'Название', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name')]) }} + * +
+
+ {{ Form::text('name', $news->name, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.name'), 'required']) }} +
+ Поле "Название" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::label('text', 'Текст', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.text')]) }} + * +
+
+ {{ Form::textarea('text', $news->text, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.news.text'), 'required']) }} +
+ Поле "Текст" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::submit('Изменить', ['class' => 'btn btn-primary']) }} +
+
+ {{ Form::close() }} +
+
+ @endauth + @include('layouts.bootstrap_validation') +@endsection diff --git a/resources/views/admin/news/index.blade.php b/resources/views/admin/news/index.blade.php new file mode 100644 index 0000000..a74052c --- /dev/null +++ b/resources/views/admin/news/index.blade.php @@ -0,0 +1,38 @@ +@extends('layouts.admin_layout') +@section('content') +
+

Новости

+
+ Создать Новость +
+
+ + + + + + + + + + @foreach($news as $item) + + + + + + @endforeach + +
НазваниеТекстДействия
{{ $item->name }}{{ Str::words($item->text, 10, '...') }}редактировать + + удалить + +
+
+
+
+ +@endsection diff --git a/resources/views/admin/news/show.blade.php b/resources/views/admin/news/show.blade.php new file mode 100644 index 0000000..9cecd9c --- /dev/null +++ b/resources/views/admin/news/show.blade.php @@ -0,0 +1,13 @@ +@extends('layouts.admin_layout') +@section('content') + @auth() +
+

Название

+

{{ $news->name }}

+

Текст

+

{{ $news->text }}

+

Фото

+ фото статьи +
+ @endauth +@endsection diff --git a/resources/views/layouts/admin_layout.blade.php b/resources/views/layouts/admin_layout.blade.php index 3821ead..56fe108 100644 --- a/resources/views/layouts/admin_layout.blade.php +++ b/resources/views/layouts/admin_layout.blade.php @@ -48,6 +48,7 @@