Giter VIP home page Giter VIP logo

yii2-dynamic-menu's Introduction

Dynamically configurable menu

This extension allow you to generate menus from backend, and load them dynamically according to user roles.

Rendering is based on dmstr/yii2-adminlte-asset menu widget.

Installation

The preferred way to install this extension is through composer.

Note Check the composer.json for this extension's requirements and dependencies. Read this web tip /wiki on setting the minimum-stability settings for your application's composer.json.

Either run

php composer.phar require esempla/yii2-dynamic-menu "1.0.*"

or add

"esempla/yii2-dynamic-menu": "1.0.*"

to the require section of your composer.json file.

Migrations

The extension has been created with database table. You should execute database migrations.(PostgreSQL ® recommended)

php yii migrate/up --migrationPath=vendor/esempla/yii2-dynamic-menu/src/migrations

Module

The extension has been created as a module. You should configure the module with a name of authManager as shown below:

'modules' => [
 ...
 'menu' => [
        'class' => 'esempla\dynamicmenu\DynamicMenu',
    ],
 ...
],

 Configuration options

  • skipDuplicateHref (default: true): if enabled, when merging multiple menus, the loader will skip items with duplicate HREF. This requires every item, even expandable ones, to have a different href (not empty). To retain empty items, they should have a unique "#anchor" link;

Usage

Add to your layouts view

<?php echo \esempla\dynamicmenu\widgets\DynamicMenuWidget::widget(); ?>

By default, the widget will search for all user assigned roles and display the menu items matching the search. It can be forced to load one or more roles, despite the user's ones, by passing the roles parameter. The parameter accepts either a string or an array of strings.

Menus management

Note To access Dynamic Menu management, go to app route /menu/dynamic-menu. In that page there is a dedicated setup for configuring the sidebar menu.

These are the options you will see (Edit item):

  • text | the label text of the menu option
  • URL | the url that the menu option will redirect the page to
  • additional URI | see description below
  • target | HTML, specifies where will the URL be shown (check HTML docs)
  • tooltip
  • visibility condition | specified role (or roles) that can see the menu option

DESCRIPTION

If you want to add more than one URI (let's say that in your action you rendere a different view based on a specific action, eg: based on the current date, role of the user, permissions, etc...), you can do that, by adding more than one URL, using the additional URI text area. When adding multiple URI, it's important to note that there is no separator to distinguish them. So the only rule used to distinguish them is by adding a different URI in a new line (don't add literally a \n!)

For example:

                ┌──────────────────────────────┐
additional URI: │ /controller/action           │
                │ /default                     │
                └──────────────────────────────┘

Note Remember NOT to put the '' or the "" for the URI and the URL!

Item fields

For each menu item, the "classic" elements can be declared:

  • Text: the text to display, with optional Font-Awesome icon
  • URL: it can either be a direct url, or a route array in the form of a string. In both cases, the string is passed to Url::toRoute() for processing
  • Target: html href target
  • Tooltip: optional link tooltip
  • Visibility condition: item visibility condition (optional). The string will be split either by | or &, and found tokens (permissions) will be passed to Yii::$app->user->can(), and concatenated with the declared logical operator. No nested condition or parenthesis are accepted. Permissions can be prefixed by ! for negative test. Some special cases strings are managed: ISGUEST will be translated to Yii::$app->user->isGuest.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.