Skip to content

Menu presenters

Denis Duliçi edited this page Apr 11, 2019 · 1 revision

This package includes some presenter classes that are used for converting menus to HTML. By default, the generated menu style is bootstrap navbar. But, there are also several different menu styles.

You can apply the menu style via ->style() method.

menu()->create('navbar', function($menu) {
    $menu->style('nav-pills');
});

Or you can set which presenter to present the menu style via ->setPresenter() method.

menu()->create('navbar', function($menu) {
    $menu->setPresenter(\Akaunting\Menu\Presenters\Bootstrap3\NavTab::class);
});

You can also set which style of presenter when you rendering a menu.

menu()->render('navbar', 'navbar-right');

menu()->render('navbar', \Akaunting\Menu\Presenters\Bootstrap3\NavPills::class);

The List of Available Menu Presenter Class

Style name Presenter class
bs3-nav Akaunting\Menu\Presenters\Bootstrap3\Nav
bs3-navbar Akaunting\Menu\Presenters\Bootstrap3\Navbar
bs3-navbar-right Akaunting\Menu\Presenters\Bootstrap3\NavbarRight
bs3-nav-pills Akaunting\Menu\Presenters\Bootstrap3\NavPills
bs3-nav-tab Akaunting\Menu\Presenters\Bootstrap3\NavTab
bs3-sidebar Akaunting\Menu\Presenters\Bootstrap3\Sidebar
adminlte Akaunting\Menu\Presenters\Admin\Adminlte
argon Akaunting\Menu\Presenters\Admin\Argon

Make A custom Presenter

You can create your own presenter classes. Make sure your presenter extends the Akaunting\Menu\Presenters\Presenter and implements the 'Akaunting\Menu\Presenters\PresenterInterface' interface.

For example, this is zurb-top-bar presenter.

use Akaunting\Menu\Presenters\Presenter;

class ZurbTopBar extends Presenter
{
	/**
	 * {@inheritdoc }
	 */
	public function getOpenTagWrapper()
	{
		return  PHP_EOL . '<section class="top-bar-section">' . PHP_EOL;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getCloseTagWrapper()
	{
		return  PHP_EOL . '</section>' . PHP_EOL;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getMenuWithoutDropdownWrapper($item)
	{
		return '<li' . $this->getActiveState($item).'><a href="' . $item->getUrl() . '">'.$item->getIcon() . ' ' . $item->title . '</a></li>';
	}

	/**
	 * {@inheritdoc }
	 */
	public function getActiveState($item)
	{
		return \Request::is($item->getRequest()) ? ' class="active"' : null;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getDividerWrapper()
	{
		return '<li class="divider"></li>';
	}

	/**
	 * {@inheritdoc }
	 */
	public function getMenuWithDropDownWrapper($item)
	{
		return '<li class="has-dropdown">
		        <a href="#">
		         ' . $item->getIcon() . ' ' . $item->title . '
		        </a>
		        <ul class="dropdown">
		          ' . $this->getChildMenuItems($item) . '
		        </ul>
		      </li>' . PHP_EOL;
		;
	}
}

To use this custom presenter, you can use the setPresenter method.

menu()->create('zurb-top-bar', function($menu) {
    $menu->setPresenter('ZurbTopBar');
});

Register A New Menu Style

Menu style is like an alias to a presenter. You can register your style from your costum presenter in the configuration file in config/menus.php.

return [

    'styles' => [

        // Boostrap 3
        'bs3-navbar' => \Akaunting\Menu\Presenters\Bootstrap3\Navbar::class,
        'bs3-navbar-right' => \Akaunting\Menu\Presenters\Bootstrap3\NavbarRight::class,
        'bs3-nav-pills' => \Akaunting\Menu\Presenters\Bootstrap3\NavPills::class,
        'bs3-nav-tab' => \Akaunting\Menu\Presenters\Bootstrap3\NavTab::class,
        'bs3-sidebar' => \Akaunting\Menu\Presenters\Bootstrap3\Sidebar::class,
        'bs3-navmenu' => \Akaunting\Menu\Presenters\Bootstrap3\Nav::class,

        // Zurb
        'zurbmenu' => \Akaunting\Menu\Presenters\Foundation\Zurb::class,

        // Admin
        'adminlte' => \Akaunting\Menu\Presenters\Admin\Adminlte::class,
        'argon' => \Akaunting\Menu\Presenters\Admin\Argon::class,
        'metronic-horizontal' => \Akaunting\Menu\Presenters\Admin\MetronicHorizontal::class,
        
    ],

    'ordering' => true,

];

Now, you can use a style like this.

menu()->create('zurb-top-bar', function($menu) {
    $menu->style('zurb-top-bar');
});

View Presenter

If you don't like to use presenter classes, you use view presenters instead. We can set which view to present the menus by calling ->setView() method.

menu()->create('navbar', function($menu) {
    $menu->setView('menu::default');
});

The List of Available View Presenter

View name Menu style
menu::default Bootstrap Navbar (default)
menu::navbar-left Bootstrap Navbar Left
menu::navbar-right Bootstrap Navbar Right
menu::nav-tabs Bootstrap Nav Tabs
menus::nav-tabs-justified Bootstrap Nav Tabs Justified
menu::nav-pills Bootstrap Nav Pills
menu::nav-pills-stacked Bootstrap Nav Pills Stacked
menu::nav-pills-justified Bootstrap Nav Pills Justified
menu::menu Plain Menu
Clone this wiki locally