2017 © Pedro Peláez
 

library laravel-multi-menu

Widget for rendering multilevel menu for Laravel-5 Framework

image

itstructure/laravel-multi-menu

Widget for rendering multilevel menu for Laravel-5 Framework

  • Thursday, June 28, 2018
  • by itstructure
  • Repository
  • 0 Watchers
  • 0 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Laravel MultiMenu widget

1 Introduction

Latest Stable Version Latest Unstable Version License Total Downloads Build Status Scrutinizer Code Quality, (*1)

This widget is to display a multi level menu. There can be nested sub-menus. Used for Laravel framework., (*2)

The widget uses data from the database, in which there are, in addition to the primary keys, also the parent keys., (*3)

Data from the database is taken from a model and must be instance of Illuminate\Database\Eloquent\Collection., (*4)

Multi level menu example scheme, (*5)

2 Requirements

  • laravel 5.5+ | 6+ | 7+ | 8+ | 9+ | 10+ | 11+ | 12+
  • php >= 7.1.0
  • composer

3 Installation

3.1 General from remote repository

Via composer:, (*6)

composer require itstructure/laravel-multi-menu "~2.0.9", (*7)

3.2 If you are testing this package from local server directory

In application composer.json file set the repository, like in example:, (*8)

"repositories": [
    {
        "type": "path",
        "url": "../laravel-multi-menu",
        "options": {
            "symlink": true
        }
    }
],

Here,, (*9)

../laravel-multi-menu - directory name, which has the same directory level as application and contains multi menu package., (*10)

Then run command:, (*11)

composer require itstructure/laravel-multi-menu:dev-master --prefer-source, (*12)

3.3 Publish in application

  • To publish all parts run command:, (*13)

    php artisan multimenu:publish, (*14)

  • To publish only config run command:, (*15)

    php artisan multimenu:publish --only=config, (*16)

    It stores multimenu.php config file to config folder., (*17)

  • To publish only views run command:, (*18)

    php artisan multimenu:publish --only=views, (*19)

    It stores view files to resources/views/vendor/multimenu folder., (*20)

  • Else you can use --force argument to rewrite already published files., (*21)

Or another variant:, (*22)

php artisan vendor:publish --provider="Itstructure\MultiMenu\MultiMenuServiceProvider", (*23)

4 Usage

4.1 Simple variant

Config part

return [
    'primaryKeyName' => 'id', // Editable
    'parentKeyName' => 'parent_id', // Editable
    'mainTemplate' => 'main', // Editable
    'itemTemplate' => 'item', // Editable
];

View template part

@php
$multiOptions = [ // Editable
    'config' => config('multimenu'),
    'data' => $pages
];
@endphp
@multiMenu($multiOptions)

Here, $pages - is from controller part, for example $pages = Page::all();. Must be instance of Illuminate\Database\Eloquent\Collection., (*24)

4.2 Addition config options and data

Config part

There is an example to set item blade templates for 3 levels:, (*25)

return [
    'primaryKeyName' => 'id',
    'parentKeyName' => 'parent_id',
    'mainTemplate' => 'main',
    'itemTemplate' => [
        'levels' => [
            'item',
            'item',
            'item_new',
        ]
    ],
];

You can set mainTemplate by analogy., (*26)

Blade templates

Example of a custom changed blade template file item.blade:, (*27)

<li>
    <a href="{{ $data->icon }}">
        Initial item Id {{ $data->id }} {{ isset($addition) ? ' | ' . $addition : '' }}
    </a>
</li>

Example of a custom changed blade template file item_new.blade:, (*28)

<li>
    <a href="{{ $data->icon }}" style="color: green; font-weight: bold;">
        New item Id {{ $data->id }} {{ isset($addition) ? ' | ' . $addition : '' }}
    </a>
</li>

Addition data

Example in a template file:, (*29)

@php
$multiOptions = [
    'config' => config('multimenu'),
    'data' => $pages,
    'additionData' => [
        'levels' => [
            0 => [],
            1 => ['addition' => 'addition string']
        ]
    ]
];
@endphp
@multiMenu($multiOptions)

4.3 Database table structure example

Table "catalogs", (*30)

| id  | parent_id |   title    | ... |
|-----|-----------|------------|-----|
|  1  |   NULL    |   item 1   | ... |
|  2  |   NULL    |   item 2   | ... |
|  3  |   NULL    |   item 3   | ... |
|  4  |   NULL    |   item 4   | ... |
|  5  |   NULL    |   item 5   | ... |
|  6  |     2     |  item 2.1  | ... |
|  7  |     2     |  item 2.2  | ... |
|  8  |     7     | item 2.2.1 | ... |
|  9  |     7     | item 2.2.2 | ... |
|  10 |     7     | item 2.2.3 | ... |
| ... |    ...    |     ...    | ... |

5 Prevention of collisions

5.1 Before save model

To prevent the entry of the wrong parent identifier (for example, the new number that is a child in a subordinate chain of nested records):, (*31)

Use static method checkNewParentId(Model $mainModel, int $newParentId... e.t.c), (*32)

Here are the required parameters:, (*33)

$mainModel - current model record, in which the parent id will be changed for new value., (*34)

$newParentId - new parent id, which must be verified., (*35)

5.2 After delete model

To prevent breaks in the chain of subject submissions:, (*36)

Use static method afterDeleteMainModel(Model $mainModel... e.t.c), (*37)

Here is the required parameter:, (*38)

$mainModel - deleted model record., (*39)

This function will rebuild the chain., (*40)

License

Copyright © 2018-2025 Andrey Girnik girnikandrey@gmail.com., (*41)

Licensed under the MIT license. See LICENSE.txt for details., (*42)

The Versions

28/06 2018

dev-master

9999999-dev

Widget for rendering multilevel menu for Laravel-5 Framework

  Sources   Download

MIT

The Requires

 

laravel widget menu

28/06 2018

1.0.1

1.0.1.0

Widget for rendering multilevel menu for Laravel-5 Framework

  Sources   Download

MIT

The Requires

 

laravel widget menu

27/06 2018

1.0.0

1.0.0.0

Widget for rendering multilevel menu for Laravel-5 Framework

  Sources   Download

MIT

The Requires

 

laravel widget menu