Holabs/Navigation
Navigation manager for Nette framework, (*1)
Installation
Requirements:
- php 7.1+
- nette/utils
- holabs/utils, (*2)
composer require holabs/navigation
Configuration
extensions:
holabs.navigation: Holabs\Navigation\Bridges\Nette\NavigationExtension
# OPTIONAL - You can predefine navigation sections
services:
holabs.navigation.manager:
setup:
- createSection('main')
- createSection('settings', 'System settings')
Using
Your Presenter, module or whatever now can looks like this:, (*3)
<?php
namespace App\Presenters;
use Holabs\Navigation\Manager;
use Nette\Application\UI\Presenter;
/**
* @author Tomáš Holan <mail@tomasholan.eu>
* @copyright Copyright © 2017, Tomáš Holan [www.tomasholan.cz]
*/
abstract class BasePresenter extends Presenter {
/** @var Manager @inject */
public $navigation;
public function startup() {
parent::startup();
$section = $this->navigation->getSection('main');
$section->createItem('dashboard', 'Main dashboard')
->setLink('Dashboard:default')
->setIcon('dashboard')
->setLabel('new', 'red')
->addActiveCondition(function() { // Set active callback
return $this->isLinkCurrent('Dashboard:*');
})
->addRenderCondition(function () { // Set render callback
return $this->getUser()->isAllowed('Dashboard', 'default');
});
$section = $this->navigation->getSection('settings');
$section->createItem('users', 'Users settings')
->setLink('Users:default')
->setIcon('group', 'green')
->addActiveCondition(function() {
return $this->isLinkCurrent('Users:*');
})
->addRenderCondition(function () {
return $this->getUser()->isAllowed('Users', 'default');
});
}
public function beforeRender() {
parent::beforeRender();
$this->template->sections = $this->navigation->getSections();
}
}