加入前台列表頁與單一文章頁

This commit is contained in:
kroutony 2020-02-26 11:05:21 +08:00
parent 89a451b825
commit 82a63cb5ce
9 changed files with 146 additions and 32 deletions

View File

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Admin\Menu; namespace App\Http\Controllers\Admin\Menu;
use App\Http\Controllers\Admin\PostController;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class PostCreateMenuItemController extends BaseMenuItemController class PostCreateMenuItemController extends BaseMenuItemController
@ -10,12 +11,6 @@ class PostCreateMenuItemController extends BaseMenuItemController
public function handle(Request $request) public function handle(Request $request)
{ {
$languages = app('SiteState')->languageTranslations; return app(PostController::class)->create($request, $this->postType);
return view('admin.menu.posts.edit', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'languages' => $languages,
'post' => null,
'resource' => $this->postType
]);
} }
} }

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers\Admin\Menu; namespace App\Http\Controllers\Admin\Menu;
use App\Repositories\PostRepository; use App\Http\Controllers\Admin\PostController;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class PostListMenuItemController extends BaseMenuItemController class PostListMenuItemController extends BaseMenuItemController
@ -13,14 +13,6 @@ class PostListMenuItemController extends BaseMenuItemController
public function handle(Request $request) public function handle(Request $request)
{ {
$postTypes = config('postTypes.' . $this->postType); return app(PostController::class)->index($request, $this->postType, $this->pageHeader);
$postRepo = new PostRepository($postTypes['model']);
$posts = $postRepo->getPostsPager();
return view('admin.menu.posts.list', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $this->postType,
'pageHeader' => $this->pageHeader,
'posts' => $posts
]);
} }
} }

View File

@ -2,7 +2,9 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Repositories\PostRepository;
use App\Traits\ModelAttributeTranslationsUpdattable; use App\Traits\ModelAttributeTranslationsUpdattable;
use App\Traits\PostTypeGettable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Auth; use Auth;
@ -11,19 +13,19 @@ class PostController extends Controller
{ {
use ModelAttributeTranslationsUpdattable; use ModelAttributeTranslationsUpdattable;
private function getModelClass($resource) use PostTypeGettable;
{
return config('postTypes.' . $resource)['model'];
}
private function getResource(Request $request) public function index(Request $request, $postType, $pageHeader)
{ {
return explode('.', str_replace(config('admin.route_name_prefix'), '', $request->route()->getName()))[0]; $postTypes = config('postTypes.' . $postType);
} $postRepo = new PostRepository($postTypes['model']);
$posts = $postRepo->getPostsPager();
public function index(Request $request) return view('admin.menu.posts.list', [
{ 'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $postType,
'pageHeader' => $pageHeader,
'posts' => $posts
]);
} }
public function edit(Request $request, $postId) public function edit(Request $request, $postId)
@ -40,9 +42,15 @@ class PostController extends Controller
]); ]);
} }
public function create(Request $request) public function create(Request $request, $postType)
{ {
$languages = app('SiteState')->languageTranslations;
return view('admin.menu.posts.edit', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'languages' => $languages,
'post' => null,
'resource' => $postType
]);
} }
public function store(Request $request) public function store(Request $request)

View File

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers;
use App\Repositories\PostRepository;
use App\Traits\PostTypeGettable;
use Illuminate\Http\Request;
class PostController extends Controller
{
use PostTypeGettable;
public function index(Request $request)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$repo = new PostRepository($modelClass);
$posts = $repo->getPostsPager();
return view('post.index', [
'posts' => $posts,
'resource' => $resource
]);
}
public function show(Request $request, $postId)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$post = $modelClass::find($postId);
return view('post.single', ['post' => $post]);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Traits;
use Illuminate\Http\Request;
trait PostTypeGettable
{
private function getModelClass($resource)
{
return config('postTypes.' . $resource)['model'];
}
private function getResource(Request $request)
{
return explode('.', str_replace(config('admin.route_name_prefix'), '', $request->route()->getName()))[0];
}
}

View File

@ -8,3 +8,7 @@
@import '~bootstrap/scss/bootstrap'; @import '~bootstrap/scss/bootstrap';
@import "app-common"; @import "app-common";
.post-feature-image {
max-width: 100%;
}

View File

@ -0,0 +1,27 @@
@extends('layouts.app')
@section('content-body')
<div class="container">
@foreach($posts as $post)
<article>
<div class="row">
<div class="col col-3">
<?php if($post->featureImage): ?>
<div class="img-wrapper">
<img src="{{ $post->featureImage->url }}" alt="{{ $post->featureImage->description }}" class="post-feature-image">
</div>
<?php endif; ?>
</div>
<div class="col col-9">
<div class="title">
<h2><a href="{{ route($resource . '.show', [$post->id]) }}">{{ $post->title }}</a></h2>
</div>
<div class="excerpt">{{ $post->excerpt }}</div>
<div class="date">{{ $post->created_at }}</div>
</div>
</div>
</article>
@endforeach
</div>
@endsection

View File

@ -0,0 +1,33 @@
@extends('layouts.app')
@section('content-body')
<div class="container">
<div class="row">
<div class="col">
<?php if($post->featureImage): ?>
<div class="img-wrapper">
<img src="{{ $post->featureImage->url }}" alt="{{ $post->featureImage->description }}" class="post-feature-image">
</div>
<?php endif; ?>
</div>
</div>
<div class="row">
<div class="col">
<h1>{{ $post->title }}</h1>
</div>
</div>
<div class="row">
<div class="col">
{{ $post->author->email }}
</div>
<div class="col">
{{ $post->created_at }}
</div>
</div>
<div class="row">
<div class="col">
{{ $post->content }}
</div>
</div>
</div>
@endsection

View File

@ -23,13 +23,18 @@ Route::view('/', 'index')->name('index');
Route::get('/robots.txt', 'PageController@robotstxt'); Route::get('/robots.txt', 'PageController@robotstxt');
$postTypes = config('postTypes');
foreach ($postTypes as $resource => $postType) {
Route::resource($resource, 'PostController');
}
/** /**
* Admin routes * Admin routes
*/ */
Route::group(['prefix' => config('admin.route'), 'middleware' => ['admin.area'], 'as' => config('admin.route_name_prefix')], function() { Route::group(['prefix' => config('admin.route'), 'middleware' => ['admin.area'], 'as' => config('admin.route_name_prefix')], function() use($postTypes) {
Route::get('/', 'AdminPageController@index')->name('index'); Route::get('/', 'AdminPageController@index')->name('index');
foreach (config('postTypes') as $resource => $postType) { foreach ($postTypes as $resource => $postType) {
Route::resource($resource, 'Admin\PostController'); Route::resource($resource, 'Admin\PostController');
} }
}); });