Skip to content

sandulat/laravel-dashboard-template

Repository files navigation

Laravel Dashboard Template

💫Basic Dashboard Template as a Package.💫

Note: Not suitable for single page applications as it's built in Blade, however you can use Vue/React/etc. components on all pages.

Installation

composer require sandulat/laravel-dashboard-template
php artisan laravel-dashboard-template:install

Note: to re-publish the front-end assets when updating the package use: php artisan laravel-dashboard-template:publish

The install command will publish the front-end assets and will create a new service provider App\Providers\DashboardServiceProvider. This is basically the main config of the template, but first let's see how to display the dashboard in the next section.

Layout

Create a route and a controller that will return a view. Inside the view place the following code:

my_view.blade.php:

@extends('laravel-dashboard-template::page')

@section('ldt-content')
    Some content
@endsection

Note: ldt stands for laravel-dashboard-template.

As you can see laravel-dashboard-template::page is just a layout. Besides ldt-content the layout provides more additional slots:

  • ldt-head - Head section for CSS, meta, etc.
  • ldt-scripts - Scripts section to include JS files.
  • ldt-topbar-left - Left section of topbar.
  • ldt-topbar-right - Right section of topbar, next to profile dropdown.
  • ldt-sidebar-footer - Footer section of sidebar.

To avoid duplication of these slots, it would be better to create your own layout that will extend the package's layout.

my_layout.blade.php:

@extends('laravel-dashboard-template::page')

@section('ldt-topbar-right')
    Language Select
@endsection

So now in your views you can do:

my_view.blade.php:

@extends('my_layout')

@section('ldt-content')
    Some content
@endsection

Card

Besides layout, the package provides a card component:

@component('laravel-dashboard-template::components.card')
    @slot('title')
        Dahboard
    @endslot

    Content
@endcomponent

The result can be seen in the screenshot at the top of the documentation.

Alerts

Out of the box the package will display 2 types of alerts above the content section of the layout. They will be displayed when you redirect with success and error flash data:

return back()->with('success', 'My success message.');
return back()->with('error', 'My error message.');

Configuration

You can configure the dashboard inside the installed provider: App\Providers\DashboardServiceProvider. By default it's empty because everything is already configured so you can start building instantly, however you can add the following methods to start customizing the dashboard:

/**
 * Topbar user name resolver.
 *
 * @return string
 */
public function userName(): string
{
    return Auth::check() ? Auth::user()->name : 'Guest';
}
/**
 * Topbar user avatar resolver.
 *
 * @return string
 */
public function userAvatar(): string
{
    if (Auth::check() && Auth::user()->avatar) {
        return Auth::user()->avatar;
    }

    return URL::asset('/vendor/laravel-dashboard-template/images/avatar.svg')
}
/**
 * Sidebar links.
 *
 * @return array
 */
public function sidebarLinks(): array
{
    return [
        'Menu' => [
            [
                'label' => 'Users',
                'url' => route('users'),
                'children' => [
                    [
                        'label' => 'Active Users',
                        'url' => route('users.active'),
                    ],
                ],
            ],
        ],
    ];
}
/**
 * Profile dropdown links.
 *
 * @return array
 */
public function profileDropdownLinks(): array
{
    return [
        [
            'label' => 'Edit Profile',
            'url' => route('profile'),
        ],
    ];
}
/**
 * Logout the user.
 *
 * @param \Illuminate\Http\Request $request
 * @return void
 */
public function logout(Request $request): void
{
    Auth::guard()->logout();

    $request->session()->invalidate();
}
/**
 * Action to be performed after logout.
 *
 * @return void
 */
public function loggedOut(): void
{
    //
}
/**
 * Redirect after logout.
 *
 * @return \Illuminate\Http\RedirectResponse
 */
public function logoutRedirect(): RedirectResponse
{
    return redirect('/');
}

Note: Each method from this service provider has dependency injection available.

Customization

I've tried to split the template into as many components & partials as possible. Just create inside your project the folder: resources/views/vendor/laravel-dashboard-template and now you can copy the files from the package and customize them. Here is the list:

  • partials/alert.blade.php
  • partials/alert_error.blade.php
  • partials/alert_success.blade.php
  • partials/sidebar.blade.php
  • partials/sidebar_link.blade.php
  • partials/sidebar_logo.blade.php
  • partials/topbar_profile_dropdown.blade.php

  • components/card.blade.php
  • components/dropdown.blade.php
  • components/dropdown_item.blade.php
  • components/topbar.blade.php

Using Vue/React/etc. components

The main div that wraps the dashboard has an app id. You can load your front-end framework onto this id and start using your components on all pages.

// Vue
new Vue({
    el: '#app',
});

//React
ReactDOM.render(<App />, document.getElementById('app'));

After you'll compile your front-end assets you can include them like this:

@section('ldt-head')
    <link href="{{ mix('/css/app.css') }}" rel="stylesheet">
@endsection
@section('ldt-scripts')
    <script src="{{ mix('/js/app.js') }}"></script>
@endsection

Note: If you don't have front-end assets versioning you might want to use the asset() method instead of mix().

Custom Logout Button

You can hide the default logout button by applying display: none; onto id #ldt-logout-button. The template already provides a logout system with customizable callbacks, so you can make use of it. Just submit the default "hidden" logout form with Javascript:

document.getElementById("ldt-logout-form").submit();

Credits

Created by Stratulat Alexandru.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy