加入前台列表頁與單一文章頁
This commit is contained in:
parent
89a451b825
commit
82a63cb5ce
@ -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
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
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 '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
@import "app-common";
|
@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');
|
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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user