Laravel에 AdminLTE Template 통합하기

by HeuJung


개발 | Posted on Thu, Dec 6, 2018 7:38 PM
0

AdminLTE는 무료 오픈소스 대시보드 템플릿이다. 본 포스트에서는 AdminLTE를 Laravel과 통합하는 방법을 설명하고자 한다.

Laravel 프로젝트에서 다음 명령어를 입력하여 AdminLTE 템플릿을 npm으로 설치한다.
(bower로 설치하는 방법도 있지만 Laravel Mix와 연계를 위해 가급적 npm을 사용하는 것이 좋다고 생각한다.)

npm install admin-lte --save-dev

resources/sass 경로에 admin.scss (이름은 자유롭게 한다.) 파일을 하나 생성하고, 코드를 다음과 같이 입력한다.

// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');

// Variables
@import 'variables';

// Font awesome
@import '~font-awesome/scss/font-awesome';

// Bootstrap3
@import '~admin-lte/bower_components/bootstrap/dist/css/bootstrap.css';

// Admin LTE
@import '~admin-lte/dist/css/AdminLTE.css';
@import '~admin-lte/dist/css/skins/_all-skins.css';
@import '~admin-lte/bower_components/Ionicons/scss/ionicons';

참고로 AdminLTE 2.x 버전은 Bootstrap 3에 의존성을 가진다. 2018년 12월 기준 현재 Laravel 5.7 버전은 Bootstrap 4 버전을 내장하고 있기 때문에 기존의 app.scss 파일에 있는 Bootstrap 4를 그대로 사용하면 스타일이 깨져 나온다. admin-lte에 내장된 Bootstrap 3를 사용하도록 한다.

resources/js 경로에 admin.js 파일을 하나 생성하고 코드를 다음과 같이 입력한다.

require('admin-lte');
require('admin-lte/bower_components/chart.js');

webpack.min.js 파일은 다음과 같이 수정한다.

mix.js('resources/js/app.js', 'public/js')
    .js('resources/js/admin.js', 'public/js')

    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/admin.scss', 'public/css')

    .extract([
        'jquery'
    ])

    .autoload({
        jquery: ['$', 'jQuery', 'jquery'],
    })

    .version();

중간에 autoload 메소드에 jquery를 로드하는 부분 없이 그냥 jquery만 vendor에 통합하면 Error가 발생한다.

다음으로, DashboardController를 생성한다.

php artisan make:controller DashboardController

app/Http/Controllers/DashboardController.php를 아래와 같이 편집한다.

class DashboardController extends Controller
{
    public function index()
    {
        return view('dashboard');
    }
}

routes/web.php를 아래와 같이 편집한다.

Route::get('/admin', 'DashboardController@index')->name('dashboard');

resources/views/layouts 에 다음과 같이 레이아웃 파일을 생성한다. 레이아웃 형식은 자유롭게 작성한다.

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title></title>

    <link href="{{ asset('css/admin.css') }}" rel="stylesheet">
</head>
<body class="hold-transition skin-blue sidebar-mini">

<div id="app">
    @yield('content')
</div>

<!-- Scripts -->
<script src="{{ mix('js/manifest.js') }}"></script>
<script src="{{ mix('js/vendor.js') }}"></script>
<script src="{{ mix('js/admin.js') }}"></script>
<script src="{{ mix('js/app.js') }}"></script>

@yield('script')
</body>
</html>

이제 resources/views에 dashboard.blade.php 뷰 파일을 생성하고 AdminLTE 데모 페이지의 소스를 참고해 내용을 채워넣는다.

js와 sass파일을 컴파일한다.

npm run prod

 

Develop Laravel AdminLTE


Leave a Comment: