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

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

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers\Admin\Menu;
use App\Repositories\PostRepository;
use App\Http\Controllers\Admin\PostController;
use Illuminate\Http\Request;
class PostListMenuItemController extends BaseMenuItemController
@ -13,14 +13,6 @@ class PostListMenuItemController extends BaseMenuItemController
public function handle(Request $request)
{
$postTypes = config('postTypes.' . $this->postType);
$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
]);
return app(PostController::class)->index($request, $this->postType, $this->pageHeader);
}
}

View File

@ -2,7 +2,9 @@
namespace App\Http\Controllers\Admin;
use App\Repositories\PostRepository;
use App\Traits\ModelAttributeTranslationsUpdattable;
use App\Traits\PostTypeGettable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
@ -11,19 +13,19 @@ class PostController extends Controller
{
use ModelAttributeTranslationsUpdattable;
private function getModelClass($resource)
{
return config('postTypes.' . $resource)['model'];
}
use PostTypeGettable;
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];
}
public function index(Request $request)
{
$postTypes = config('postTypes.' . $postType);
$postRepo = new PostRepository($postTypes['model']);
$posts = $postRepo->getPostsPager();
return view('admin.menu.posts.list', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $postType,
'pageHeader' => $pageHeader,
'posts' => $posts
]);
}
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)

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 "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');
$postTypes = config('postTypes');
foreach ($postTypes as $resource => $postType) {
Route::resource($resource, 'PostController');
}
/**
* 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');
foreach (config('postTypes') as $resource => $postType) {
foreach ($postTypes as $resource => $postType) {
Route::resource($resource, 'Admin\PostController');
}
});