Bladeren bron

后台配置化菜单,实现选中效果

Moell 9 jaren geleden
bovenliggende
commit
e54a919137

+ 2 - 1
.gitignore

@@ -5,4 +5,5 @@ Homestead.yaml
 Homestead.json
 .env
 /.idea
-/public/uploads
+/public/uploads
+*.js linguist-language=PHP

+ 1 - 1
app/Http/routes.php

@@ -26,7 +26,7 @@ Route::group(['prefix'=>'backend'], function(){
     Route::post('/register', 'Backend\AuthController@postRegister');*/
 
     Route::group(['middleware' => ['auth']], function(){
-        Route::get('/', 'Backend\HomeController@index');
+        Route::get('/', ['as' => 'backend.home', 'uses' =>'Backend\HomeController@index']);
         Route::resource('article', 'Backend\ArticleController');
         Route::resource('category', 'Backend\CategoryController');
         Route::get('category/set-nav/{id}', ['as' => 'backend.category.set-nav', 'uses' => 'Backend\CategoryController@setNavigation']);

+ 88 - 0
app/Presenters/BackendPresenter.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Presenters;
+
+use Route;
+
+class BackendPresenter
+{
+    private $route;
+
+    public function menu()
+    {
+        $this->route = Route::currentRouteName();
+        $menu = config('blog.menu');
+
+        $menuString = '';
+        foreach ($menu as $mList) {
+
+            $count = count($mList);
+            if ($count > 1) {
+                $menuString .= $this->childrenShow($mList);
+            } else {
+                $menuString .= $this->parentShow($mList);
+            }
+        }
+
+        return $menuString;
+    }
+
+    /**
+     * @param $menu
+     * @return string
+     */
+    private function childrenShow($menu)
+    {
+        $string = '<li class="treeview %s">';
+        $string .= ' <a href="#">
+                        <i class="'.$menu['tree_title']['icon'].'"></i>
+                        <span>'.$menu['tree_title']['name'].'</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>';
+
+        unset($menu['tree_title']);
+        $string .='<ul class="treeview-menu"> %s </ul>';
+        $liString = '';
+        $active = '';
+        foreach ($menu as $route => $m) {
+            $activeString = $this->active($route);
+            if ($activeString != "") {
+                $active = $activeString;
+            }
+            $liString .= "<li class='".$activeString."'><a href='".route($route)."'>".$m['name']."</a></li>";
+        }
+
+        $string .= '</li>';
+        $string = sprintf($string, $active, $liString);
+
+        return $string;
+    }
+
+    /**
+     * @param $menu
+     * @return string
+     */
+    private function parentShow($menu)
+    {
+        $string = '';
+        foreach ($menu as $route => $m) {
+            $string.= "<li class='treeview ".$this->active($route)."'>
+                <a href='".route($route)."'>
+                    <i class='".$m['icon']."'></i>
+                    <span>".$m['name']."</span>
+                </a>
+            </li>";
+        }
+
+        return $string;
+    }
+
+    /**
+     * @param $route
+     * @return string
+     */
+    private function active($route)
+    {
+        return $this->route == $route ? ' active' : '';
+    }
+}

+ 73 - 0
config/blog.php

@@ -4,5 +4,78 @@ return [
     'uploads' => [
         'storage' => 'upload',
         'webPath' => '/uploads'
+    ],
+    'menu' => [
+        [
+            'backend.home' => [
+                'icon'  => 'fa fa-home',
+                'name'  => 'Home'
+            ]
+
+        ],
+        [
+            'tree_title' => [
+                'icon' => 'fa fa-files-o',
+                'name' => '文章'
+            ],
+            'backend.article.index' => [
+                'icon' => '',
+                'name' => '文章管理'
+            ],
+            'backend.article.create' => [
+                'icon' => '',
+                'name' => '发布文章'
+            ],
+            'backend.category.index' => [
+                'icon' => '',
+                'name' => '文章分类'
+            ]
+        ],
+        [
+            'backend.tag.index' => [
+                'icon' => 'fa fa-tags',
+                'name' => '标签'
+            ]
+        ],
+        [
+            'backend.upload.index' => [
+                'icon' => 'fa fa-file-image-o',
+                'name' => '文件'
+            ]
+        ],
+        [
+            'backend.navigation.index' => [
+                'icon' => 'fa fa-navicon',
+                'name' => '导航'
+            ]
+        ],
+        [
+            'tree_title' => [
+                'icon' => 'fa fa-user',
+                'name' => '用户'
+            ],
+            'backend.user.index' => [
+                'icon' => '',
+                'name' => '用户管理'
+            ],
+            'backend.user.create' => [
+                'icon' => '',
+                'name' => '用户添加'
+            ]
+        ],
+        [
+            'tree_title' => [
+                'icon' => 'fa fa-cog',
+                'name' => '系统设置'
+            ],
+            'backend.system.index' => [
+                'icon' => '',
+                'name' => '系统设置'
+            ],
+            'backend.link.index' => [
+                'icon' => '',
+                'name' => '友情链接'
+            ]
+        ]
     ]
 ];

+ 1 - 1
resources/views/backend/home.blade.php

@@ -20,7 +20,7 @@
             <div class="box box-solid" style="padding: 10px;">
                 <h3>欢迎使用Moell Blog!</h3>
                 <strong>简介</strong>
-                <p> Moell Blog 是一个基于Laravel支持markdow语法开源的简易blog,致力于给博主更好的写作体验。</p>
+                <p> Moell Blog 是一个基于Laravel开发,支持markdown语法开源的简易博客,致力于给博主更好的写作体验。</p>
                 <strong>开发者信息</strong>
                 <p>Name : Moell</p>
                 <p>Email : moell91@foxmail.com</p>

+ 3 - 58
resources/views/layouts/backend.blade.php

@@ -91,6 +91,7 @@
         <!-- sidebar: style can be found in sidebar.less -->
         <section class="sidebar">
             <!-- Sidebar user panel -->
+            @inject('backendPresenter', 'App\Presenters\BackendPresenter')
             <div class="user-panel">
                 <div class="pull-left image">
                     <img src="{{ asset('uploads/avatar')."/".Auth::user()->user_pic }}" class="img-circle" alt="User Image">
@@ -100,64 +101,8 @@
                     <a href="#"><i class="fa fa-circle text-success"></i> Online</a>
                 </div>
             </div>
-            <ul class="sidebar-menu">
-                <li class="header">博客导航</li>
-                <li class="active treeview">
-                    <a href="{{ url('backend') }}">
-                        <i class="fa fa-home"></i> <span>Home</span>
-                    </a>
-                </li>
-                <li class="treeview">
-                    <a href="#">
-                        <i class="fa fa-files-o"></i>
-                        <span>文章</span>
-                        <i class="fa fa-angle-left pull-right"></i>
-                    </a>
-                    <ul class="treeview-menu">
-                        <li><a href="{{ url('backend/article') }}">文章管理</a></li>
-                        <li><a href="{{ url('backend/article/create') }}">发布文章</a></li>
-                        <li><a href="{{ url('backend/category') }}">文章分类</a></li>
-                    </ul>
-                </li>
-                <li>
-                    <a href="{{ url('backend/tag') }}">
-                        <i class="fa fa-tags"></i> <span>标签</span>
-                    </a>
-                </li>
-                <li>
-                    <a href="{{ url('backend/upload') }}">
-                        <i class="fa fa-file-image-o"></i>
-                        <span>文件</span>
-                    </a>
-                </li>
-                <li>
-                    <a href="{{ url('backend/navigation') }}">
-                        <i class="fa fa-navicon"></i>
-                        <span>导航</span>
-                    </a>
-                </li>
-                <li class="treeview">
-                    <a href="#">
-                        <i class="fa fa-user"></i>
-                        <span>用户</span>
-                        <i class="fa fa-angle-left pull-right"></i>
-                    </a>
-                    <ul class="treeview-menu">
-                        <li><a href="{{ url('backend/user') }}">用户管理</a></li>
-                        <li><a href="{{ url('backend/user/create') }}">用户添加</a></li>
-                    </ul>
-                </li>
-                <li class="treeview">
-                    <a href="#">
-                        <i class="fa fa-cog"></i> <span>设置</span>
-                        <i class="fa fa-angle-left pull-right"></i>
-                    </a>
-                    <ul class="treeview-menu">
-                        <li><a href="{{ url('backend/system') }}">博客设置</a></li>
-                        <li><a href="{{ url('backend/link') }}">友情链接</a></li>
-                    </ul>
-                </li>
-
+            <ul class='sidebar-menu'>
+                {!! $backendPresenter->menu()  !!}
             </ul>
         </section>
         <!-- /.sidebar -->