Przeglądaj źródła

新增博客设置,数据填充,模板获取博客设置信息

Moell 9 lat temu
rodzic
commit
afb40baa37

+ 33 - 0
app/Http/Controllers/Backend/SystemController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\Backend;
+
+use Illuminate\Http\Request;
+
+use App\Http\Requests;
+use App\Http\Controllers\Controller;
+use App\Repositories\SystemRepositoryEloquent;
+
+class SystemController extends Controller
+{
+    protected $system;
+
+    public function __construct(SystemRepositoryEloquent $system)
+    {
+        $this->system = $system;
+    }
+
+    public function index()
+    {
+        $system = $this->system->optionList();
+        return view('backend.system.index', compact('system'));
+    }
+
+    public function store(Request $request)
+    {
+        if ($this->system->store($request->all())) {
+            return redirect()->back()->with('success', '操作成功');
+        }
+        return redirect()->back()->withErrors('操作失败');
+    }
+}

+ 2 - 0
app/Http/routes.php

@@ -34,5 +34,7 @@ Route::group(['prefix'=>'backend'], function(){
         Route::resource('tag', 'Backend\TagController');
         Route::resource('link', 'Backend\LinkController');
         Route::resource('navigation', 'Backend\NavigationController');
+        Route::get('system', ['as' => 'backend.system.index', 'uses' => 'Backend\SystemController@index']);
+        Route::post('system', ['as' => 'backend.system.store', 'uses' => 'Backend\SystemController@store']);
     });
 });

+ 19 - 0
app/Models/System.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Prettus\Repository\Contracts\Transformable;
+use Prettus\Repository\Traits\TransformableTrait;
+
+class System extends Model implements Transformable
+{
+    use TransformableTrait;
+
+    protected $fillable = ['key', 'value'];
+
+    public $timestamps  = false;
+
+
+
+}

+ 63 - 0
app/Presenters/SystemPresenter.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Presenters;
+
+use App\Transformers\SystemTransformer;
+use Prettus\Repository\Presenter\FractalPresenter;
+use App\Repositories\SystemRepositoryEloquent;
+
+/**
+ * Class SystemPresenter
+ *
+ * @package namespace App\Presenters;
+ */
+class SystemPresenter extends FractalPresenter
+{
+    protected $system;
+
+    protected $list;
+
+    public function __construct(SystemRepositoryEloquent $system)
+    {
+        $this->system = $system;
+        $this->list = $this->system->optionList();
+        parent::__construct();
+    }
+
+    /**
+     * Transformer
+     *
+     * @return \League\Fractal\TransformerAbstract
+     */
+    public function getTransformer()
+    {
+        return new SystemTransformer();
+    }
+
+    /**
+     * 根据key获取value
+     *
+     * @param $key
+     * @return mixed
+     */
+    public function getKeyValue($key)
+    {
+        return $this->list[$key];
+    }
+
+    /**
+     * 检查返回相应的value
+     *
+     * @param $key
+     * @param $defaultValue
+     * @return mixed
+     */
+    public function checkReturnValue($key, $defaultValue)
+    {
+        if ($defaultValue != "") {
+            return $defaultValue;
+        }
+
+        return $this->getKeyValue($key);
+    }
+}

+ 14 - 0
app/Repositories/SystemRepository.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Repositories;
+
+use Prettus\Repository\Contracts\RepositoryInterface;
+
+/**
+ * Interface SystemRepository
+ * @package namespace App\Repositories;
+ */
+interface SystemRepository extends RepositoryInterface
+{
+    //
+}

+ 72 - 0
app/Repositories/SystemRepositoryEloquent.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Repositories;
+
+use Prettus\Repository\Eloquent\BaseRepository;
+use Prettus\Repository\Criteria\RequestCriteria;
+use App\Repositories\SystemRepository;
+use App\Models\System;
+use App\Validators\SystemValidator;
+
+/**
+ * Class SystemRepositoryEloquent
+ * @package namespace App\Repositories;
+ */
+class SystemRepositoryEloquent extends BaseRepository implements SystemRepository
+{
+    /**
+     * Specify Model class name
+     *
+     * @return string
+     */
+    public function model()
+    {
+        return System::class;
+    }
+
+    
+
+    /**
+     * Boot up the repository, pushing criteria
+     */
+    public function boot()
+    {
+        $this->pushCriteria(app(RequestCriteria::class));
+    }
+
+    /**
+     * 保存博客设置
+     *
+     * @param array $data
+     * @return bool
+     */
+    public function store(array $data)
+    {
+        if (!$data) {
+            return false;
+        }
+
+        unset($data['_token']);
+        foreach ($data as $key => $value) {
+            $this->model->where('key', $key)->update(['value' => $value]);
+        }
+
+        return true;
+    }
+
+    /**
+     * 获取选项列表
+     *
+     * @return array
+     */
+    public function optionList()
+    {
+        $all = $this->all(['key', 'value']);
+        $system = [];
+        foreach ($all as $a) {
+            $system[$a['key']]  = $a['value'];
+        }
+
+        return $system;
+    }
+}

+ 32 - 0
app/Transformers/SystemTransformer.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Transformers;
+
+use League\Fractal\TransformerAbstract;
+use App\Models\System;
+
+/**
+ * Class SystemTransformer
+ * @package namespace App\Transformers;
+ */
+class SystemTransformer extends TransformerAbstract
+{
+
+    /**
+     * Transform the \System entity
+     * @param \System $model
+     *
+     * @return array
+     */
+    public function transform(System $model)
+    {
+        return [
+            'id'         => (int) $model->id,
+
+            /* place your other model properties here */
+
+            'created_at' => $model->created_at,
+            'updated_at' => $model->updated_at
+        ];
+    }
+}

+ 34 - 0
database/migrations/2016_09_10_113755_create_systems_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateSystemsTable extends Migration
+{
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('systems', function(Blueprint $table) {
+            $table->increments('id');
+			$table->string('key');
+			$table->string('value');
+			$table->unique('key');
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('systems');
+	}
+
+}

+ 7 - 1
database/seeds/DatabaseSeeder.php

@@ -1,6 +1,7 @@
 <?php
 
 use Illuminate\Database\Seeder;
+use Illuminate\Database\Eloquent\Model;
 
 class DatabaseSeeder extends Seeder
 {
@@ -11,6 +12,11 @@ class DatabaseSeeder extends Seeder
      */
     public function run()
     {
-        // $this->call(UsersTableSeeder::class);
+        Model::unguard();
+
+        $this->call(UserTableSeeder::class);
+        $this->call(SystemTableSeeder::class);
+
+        Model::reguard();
     }
 }

+ 27 - 0
database/seeds/SystemTableSeeder.php

@@ -0,0 +1,27 @@
+<?php
+
+use DB;
+use Illuminate\Database\Seeder;
+
+class SystemTableSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        $systems = [
+            ['key' => 'blog_name'],
+            ['key' => 'motto'],
+            ['key' => 'title'],
+            ['key' => 'seo_keyword'],
+            ['key' => 'seo_desc'],
+            ['key' => 'icp'],
+            ['key' => 'github_url'],
+            ['key' => 'weibo_url']
+        ];
+        DB::table('systems')->insert($systems);
+    }
+}

+ 21 - 0
database/seeds/UserTableSeeder.php

@@ -0,0 +1,21 @@
+<?php
+
+use DB;
+use Illuminate\Database\Seeder;
+
+class UserTableSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        DB::table('users')->insert([
+            'name'  => 'admin',
+            'email' => 'admin@gmall.com',
+            'password' => bcrypt('admin')
+        ]);
+    }
+}

+ 57 - 6
resources/views/backend/home.blade.php

@@ -4,15 +4,66 @@
 
 @section('header')
     <h1>
-        Dashboard
-        <small>Control panel</small>
+        Home
+        <small>Moell Blog</small>
     </h1>
-    <ol class="breadcrumb">
-        <li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>
-        <li class="active">Dashboard</li>
-    </ol>
 @endsection
 
 @section('content')
+    <style>
+        p {
+            text-indent: 10px;
+        }
+    </style>
+    <div class="row">
+        <div class="col-xs-12">
+            <div class="box box-solid" style="padding: 10px;">
+                <h3>欢迎使用Moell Blog!</h3>
+                <strong>简介</strong>
+                <p> Moell Blog 是一个基于Laravel支持markdow语法开源的简易blog,致力于给博主更好的写作体验。</p>
+                <strong>开发者信息</strong>
+                <p>Name : Moell</p>
+                <p>Email : moell91@foxmail.com</p>
+                <p>博客地址 : <a href="http://moell.cn" target="_blank">Moell Blog</a></p>
+                <p>项目地址 : <a href="https://github.com/moell-peng/moell-blog" target="_blank">Github</a></p>
 
+                <strong>依赖开源程序</strong>
+                <ul>
+                    <li>LAMP</li>
+                    <li>
+                        <a href="https://laravel.com/" target="_blank">Laravel</a>
+                    </li>
+                    <li>
+                        <a href="https://www.almsaeedstudio.com" target="_blank">
+                            AdminLTE
+                        </a>
+                    </li>
+                    <li>
+                        <a href="http://getbootstrap.com/" target="_blank">
+                            Bootstrap
+                        </a>
+                    </li>
+                    <li>
+                        <a href="https://pandao.github.io/editor.md/examples/index.html" target="_blank">
+                            Editor.md
+                        </a>
+                    </li>
+                    <li>
+                        <a href="https://github.com/andersao/l5-repository" target="_blank">
+                            andersao/l5-repository
+                        </a>
+                    </li>
+                    <li>
+                        <a href="https://github.com/etrepat/baum" target="_blank">
+                            etrepat/baum
+                        </a>
+                    </li>
+                </ul>
+                <strong>关于问题反馈</strong>
+                <p>
+                    可以发送Email,或者在Github上反馈遇到的问题,看到后会逐一帮助解决问题,务必将问题描述清楚。
+                </p>
+            </div>
+        </div>
+    </div>
 @endsection

+ 14 - 0
resources/views/backend/home.blade.php~

@@ -0,0 +1,14 @@
+@extends('layouts.backend')
+
+@section('title', 'Moell Blog')
+
+@section('header')
+    <h1>
+        Home
+        <small>Moell Blog</small>
+    </h1>
+@endsection
+
+@section('content')
+    ddd
+@endsection

+ 1 - 0
resources/views/backend/navigation/index.blade.php

@@ -11,6 +11,7 @@
 @section('content')
     <div class="row">
         <div class="col-xs-12">
+            @include('backend.alert.warning')
             @include('backend.alert.success')
             <div class="box box-solid">
                 <!-- /.box-header -->

+ 98 - 0
resources/views/backend/system/index.blade.php

@@ -0,0 +1,98 @@
+@extends('layouts.backend')
+
+@section('title', '博客设置')
+
+@section('header')
+    <h1>
+        博客设置
+    </h1>
+@endsection
+
+@section('content')
+    <div class="row">
+        <div class="col-xs-12">
+            @include('backend.alert.warning')
+            @include('backend.alert.success')
+            <div class="box box-solid">
+                <form role="form" method="post" enctype="multipart/form-data" action="{{ url('backend/system') }}" id="system-form" >
+                    <div class="box-body">
+                        <div class="form-group">
+                            <label for="blog_name">博客名字</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type='text' value="{{ $system['blog_name'] }}" class='form-control' name="blog_name" id='blog_name' placeholder='请输入博客名字'>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="motto">博客格言</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type='text' value="{{ $system['motto'] }}" class='form-control' name="motto" id='motto' placeholder='请输入博客格言'>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="title">标题</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['title'] }}" class='form-control' name="title" id="title" placeholder="请输入标题">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="seo_keyword">SEO 关键字</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['seo_keyword'] }}" class='form-control' name="seo_keyword" id="seo_keyword" placeholder="请输入SEO关键字">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="seo_desc">SEO 描述</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['seo_desc'] }}" class='form-control' name="seo_desc" id="seo_desc" placeholder="请输入SEO 描述">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="seo_desc">Github 地址</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['github_url'] }}" class='form-control' name="github_url" id="github_url" placeholder="请输入Github 地址">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="seo_desc">Weibo 地址</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['weibo_url'] }}" class='form-control' name="weibo_url" id="weibo_url" placeholder="请输入Weibo 地址">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label for="seo_desc">ICP 备案号</label>
+                            <div class="row">
+                                <div class='col-md-6'>
+                                    <input type="text"  value="{{ $system['icp'] }}" class='form-control' name="icp" id="icp" placeholder="请输入ICP 备案号">
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+
+                    {{ csrf_field() }}
+
+
+                    <div class="box-footer">
+                        <button type="submit" class="btn btn-primary">确定</button>
+                        <button type="button" class="btn btn-warning" id="reset-btn">重置</button>
+                    </div>
+                </form>
+            </div>
+            <!-- /.box -->
+        </div>
+    </div>
+@endsection

+ 5 - 3
resources/views/default/category_article.blade.php

@@ -1,10 +1,12 @@
+@inject('systemPresenter', 'App\Presenters\SystemPresenter')
+
 @extends('layouts.app')
 
-@section('title', $category->name)
+@section('title', $systemPresenter->checkReturnValue('title', $category->name))
 
-@section('description', $category->name)
+@section('description', $systemPresenter->checkReturnValue('seo_desc', $category->name))
 
-@section('keywords', $category->name)
+@section('keywords', $systemPresenter->checkReturnValue('seo_keyword', $category->name))
 
 @section('header-text')
     <div class="text-inner">

+ 1 - 1
resources/views/default/footer.blade.php

@@ -2,7 +2,7 @@
     <div class="container">
         <div class="row">
             <div class="col-md-12 text-center">
-                <p>&copy; Moell Blog</p>
+                <p><strong>Copyright &copy;<a href="http://moell.cn" target="_blank">Moell Blog</a></strong></p>
             </div>
         </div>
     </div>

+ 8 - 4
resources/views/default/home.blade.php

@@ -1,16 +1,20 @@
+@inject('systemPresenter', 'App\Presenters\SystemPresenter')
+
 @extends('layouts.app')
 
-@section('title', 'Moell Blog')
+@section('title', $systemPresenter->getKeyValue('title'))
 
-@section('description', 'Moell Blog')
+@section('description', $systemPresenter->getKeyValue('seo_desc'))
 
-@section('keywords', 'Moell Blog')
+@section('keywords', $systemPresenter->getKeyValue('seo_keyword'))
 
 @section('header-text')
     <div class="text-inner text-center">
         <div class="row">
             <div class="col-md-8 col-md-offset-2">
-                <h1 class="to-animate fadeInUp animated">做努力的自己</h1>
+                <h1 class="to-animate fadeInUp animated">
+                    {{ $systemPresenter->getKeyValue('motto') }}
+                </h1>
                 <div class="to-animate fadeInUp animated">
                     <a href=''>github</a>
                     <a href=''>web</a>

+ 5 - 3
resources/views/default/show_article.blade.php

@@ -1,10 +1,12 @@
+@inject('systemPresenter', 'App\Presenters\SystemPresenter')
+
 @extends('layouts.app')
 
-@section('title', $article->title)
+@section('title', $systemPresenter->checkReturnValue('title', $article->title))
 
-@section('description', $article->desc)
+@section('description', $systemPresenter->checkReturnValue('seo_desc', $article->desc))
 
-@section('keywords', $article->keyword)
+@section('keywords', $systemPresenter->checkReturnValue('seo_keyword', $article->keyword))
 
 @section('style')
     <link rel="stylesheet" href="{{ asset('editor.md/css/editormd.preview.min.css') }}">

+ 1 - 1
resources/views/default/tag.blade.php

@@ -12,6 +12,6 @@
                     <a href="{{ route('tag', ['id' => $tl->id]) }}" target="_blank">{{ $tl->tag_name }}</a>
                 </span>
             @endforeach
-        @endif;
+        @endif
     </div>
 </div>

+ 4 - 2
resources/views/default/tag_article.blade.php

@@ -1,10 +1,12 @@
+@inject('systemPresenter', 'App\Presenters\SystemPresenter')
+
 @extends('layouts.app')
 
 @section('title', $tag->tag_name)
 
-@section('description', $tag->tag_name)
+@section('description', $systemPresenter->getKeyValue('seo_desc'))
 
-@section('keywords', $tag->tag_name)
+@section('keywords', $systemPresenter->getKeyValue('seo_keyword'))
 
 @section('header-text')
     <div class="text-inner">

+ 2 - 1
resources/views/layouts/app.blade.php

@@ -27,6 +27,7 @@
 
 </head>
 <body>
+@inject('systemPresenter', 'App\Presenters\SystemPresenter')
 <header id='moell-header'>
     <nav class='navbar navbar-default'>
         <div class='container'>
@@ -38,7 +39,7 @@
                     <span class="icon-bar"></span>
                     <span class="icon-bar"></span>
                 </button>
-                <a class="navbar-brand" href="{{ url("/") }}" >Moell Blog</a>
+                <a class="navbar-brand" href="{{ url("/") }}" >{{ $systemPresenter->getKeyValue('blog_name') }}</a>
             </div>
             @include('default.navigation')
         </div>

+ 8 - 8
resources/views/layouts/backend.blade.php

@@ -52,12 +52,12 @@
                 <ul class="nav navbar-nav">
                     <!-- Messages: style can be found in dropdown.less-->
                     <li class="dropdown messages-menu">
-                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                        {{--<a href="#" class="dropdown-toggle" data-toggle="dropdown">
                             <i class="fa fa-envelope-o"></i>
                             <span class="label label-success">4</span>
-                        </a>
+                        </a>--}}
                         <ul class="dropdown-menu">
-                            <li class="header">You have 4 messages</li>
+                            {{--<li class="header">You have 4 messages</li>--}}
                             <li>
                                 <!-- inner menu: contains the actual data -->
                                 <ul class="menu">
@@ -141,7 +141,7 @@
 
                                 <p>
                                     Moell Blog - 做努力的自己
-                                    <small>2016年6月</small>
+                                    {{--<small></small>--}}
                                 </p>
                             </li>
                             <!-- Menu Body -->
@@ -162,10 +162,10 @@
                             <!-- Menu Footer-->
                             <li class="user-footer">
                                 <div class="pull-left">
-                                    <a href="#" class="btn btn-default btn-flat">关于我</a>
+                                    <a href="{{ url('/') }}" target="_blank" class="btn btn-default btn-flat">首页</a>
                                 </div>
                                 <div class="pull-right">
-                                    <a href="{{ url('backend/loginout') }}" class="btn btn-default btn-flat">退出</a>
+                                    <a href="{{ url('backend/logout') }}" class="btn btn-default btn-flat">退出</a>
                                 </div>
                             </li>
                         </ul>
@@ -246,7 +246,7 @@
                         <i class="fa fa-angle-left pull-right"></i>
                     </a>
                     <ul class="treeview-menu">
-                        <li><a href="{{ url('backend/setting') }}">博客设置</a></li>
+                        <li><a href="{{ url('backend/system') }}">博客设置</a></li>
                         <li><a href="{{ url('backend/link') }}">友情链接</a></li>
                     </ul>
                 </li>
@@ -271,7 +271,7 @@
         <div class="pull-right hidden-xs">
             <b>Version</b> 0.0.1
         </div>
-        <strong>Copyright &copy;<a href="http://almsaeedstudio.com">moell</a>.</strong>
+        <strong>Copyright &copy;<a href="http://moell.cn" target="_blank">Moell Blog</a></strong>
     </footer>
 </div>
 <!-- ./wrapper -->