ctf0/simple-menu

create a menu that support page (multiLocale 'title/ url/ prefix', nesting, template, static/dynamic, roles & permissions).

Installs: 91

Dependents: 0

Suggesters: 0

Stars: 21

Watchers: 2

Forks: 3

Open Issues: 1

Language:HTML


README

Create menus & pages that support (multiLocale "title, url, body, ...", nesting, template, static & dynamic data, roles & permissions).

  • package requires Laravel v5.5+
  • package rely heavily on caching so make sure to install one of the tag enabled drivers Memcached / Redis

Installation

  • composer require ctf0/simple-menu

  • after installation, run php artisan sm:setup to add

    • package routes to routes/web.php
    • package assets compiling to webpack.mix.js
  • publish the packages assets with php artisan vendor:publish

  • install JS dependencies

    yarn add vue axios vue-tippy@v1 vuedraggable vue-notif vue-multi-ref vue-awesome@v2 list.js
    # or
    npm install vue axios vue-tippy@v1 vuedraggable vue-notif vue-multi-ref vue-awesome@v2 list.js --save
  • add this one liner to your main js file and run npm run watch to compile your js/css files.

    • if you are having issues Check.
    // app.js
    
    window.Vue = require('vue')
    
    require('../vendor/SimpleMenu/js/manager')
    
    new Vue({
        el: '#app'
    })

Config

config/simpleMenu.php

return [
    /*
     * the menu list classes to be used for "render()"
     */
    'listClasses' => [
        'ul' => 'menu-list',
        'li' => 'list-item',
        'a' => 'is-active',
    ],

    /*
     * the path where we will save the routes list
     */
    'routeListPath' => storage_path('logs/simpleMenu.php'),

    /*
     * where to redirect when a route is available in one locale "en" but not in another "fr" ?
     */
    'unFoundLocalizedRoute' => 'root',

    /*
     * package models
     */
    'models'=> [
        'user' => App\User::class,
        'page' => \ctf0\SimpleMenu\Models\Page::class,
        'menu' => \ctf0\SimpleMenu\Models\Menu::class,
    ],

    /*
     * when adding a page which is a nest of a nother to a menu, ex.
     *
     * root
     *   | child 1
     *     | child 2 "add this along with its childrens to another menu"
     *       | child 3
     *
     * do you want to clear its parent and make it a root ?
     */
    'clearPartialyNestedParent' => true,

    /*
     * when removing a root page from a menu, ex.
     *
     * root "remove"
     *   | child 1
     *     | child 2
     *       | child 3
     *
     * do you want clear all of its 'Descendants' ?
     */
    'clearRootDescendants' => false,

    /*
     * when removing a nest from a list, ex.
     *
     * root
     *   | child 1
     *     | child 2 "remove"
     *       | child 3
     *
     * do you want to reset its hierarchy ?
     */
    'clearNestDescendants'=> false,

    /*
     * when deleting a page "from the db", ex.
     *
     * page "delete/destroy"
     *   | nested child 1
     *     | nested child 2
     *       | nested child 3
     *
     * do you also want to delete all of its children ?
     */
    'deletePageAndNests' => false,

    /*
     * package routes url & route name prefix
     */
    'crud_prefix' => 'admin',

    /*
     * all the package controllers
     *
     * if you need to change anything, just create new controller
     * and extend from the below original
     * ex. "class ExampleController extends PagesController"
     */
    'controllers'=> [
        'permissions' => '\ctf0\SimpleMenu\Controllers\Admin\PermissionsController',
        'admin' => '\ctf0\SimpleMenu\Controllers\Admin\AdminController@index',
        'users' => '\ctf0\SimpleMenu\Controllers\Admin\UsersController',
        'pages' => '\ctf0\SimpleMenu\Controllers\Admin\PagesController',
        'roles' => '\ctf0\SimpleMenu\Controllers\Admin\RolesController',
        'menus' => '\ctf0\SimpleMenu\Controllers\Admin\MenusController',
    ],
];

Usage

Demo
Usage
Views

  • add SMUsers trait to your User Model

    use ctf0\SimpleMenu\Models\Traits\SMUsers;
    
    // ...
    
    class User extends Authenticatable
    {
        use Notifiable, SMUsers;
    }
  • visit localhost:8000/admin