-
Notifications
You must be signed in to change notification settings - Fork 18
Menu presenters
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);
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 |
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');
});
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');
});
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');
});
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 |