加入前台列表頁與單一文章頁
This commit is contained in:
parent
89a451b825
commit
82a63cb5ce
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
32
app/Http/Controllers/PostController.php
Normal file
32
app/Http/Controllers/PostController.php
Normal 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]);
|
||||
}
|
||||
}
|
||||
18
app/Traits/PostTypeGettable.php
Normal file
18
app/Traits/PostTypeGettable.php
Normal 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];
|
||||
}
|
||||
}
|
||||
4
resources/sass/app.scss
vendored
4
resources/sass/app.scss
vendored
@ -8,3 +8,7 @@
|
||||
@import '~bootstrap/scss/bootstrap';
|
||||
|
||||
@import "app-common";
|
||||
|
||||
.post-feature-image {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
27
resources/views/post/index.blade.php
Normal file
27
resources/views/post/index.blade.php
Normal 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
|
||||
33
resources/views/post/single.blade.php
Normal file
33
resources/views/post/single.blade.php
Normal 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
|
||||
@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user