tomaskavalek / Navigation

Control pro Nette Framework usnadňující tvorbu menu a drobečkové navigace

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Navigation
==========

Control pro Nette Framework usnadňující tvorbu menu a drobečkové navigace

Autor: Jan Marek
Licence: MIT

Použití
-------

Továrnička v presenteru:

	protected function createComponentNavigation($name) {
		$nav = new Navigation($this, $name);
		$nav->setupHomepage("Úvod", $this->link("Homepage:"));
		$sec = $nav->add("Sekce", $this->link("Category:", array("id" => 1)));
		$article = $sec->add("Článek", $this->link("Article:", array("id" => 1)));
		$nav->setCurrent($article);
	}


Menu v šabloně:

	{widget navigation}


Drobečková navigace v šabloně:

	{widget navigation:breadcrumbs}

--------------------------------------------------------------------------------

Autor: Tomáš Kavalek
	
Jednoduché použití při práci s databází
---------------------------------------

Vývojová verze - autor bez odpovědnosti! :-)


Příklad jednoduché tabulky:

+---------+------------------------------------+-------------------------------+ 
| Sloupec | Typ	                               | Komentář                      |
| id      | tinyint(3) unsigned Auto Increment | PK                            |
| parent  | tinyint(3) unsigned Default 0      | rodičovský prvek              |
| name    | varchar(255)                       | titulek odkazu                |
| link    | varchar(255)                       | odkaz na presenter a action   |
| params  | varchar(255) NULL                  | případné parametry v JSON     |
| order   | tinyint(3) unsigned Default 0      | pořadí                        |
+---------+------------------------------------+-------------------------------+

id  parent  name        link                    params    order
1   0       Oddělení    Default:showPage        {"id":1}  1
2   0       Kontakt     Default:showContact     NULL      2 
3   1       IT          Default:showPage        {"id":2}  1
4   1       Ekonomické  Default:showPage        {"id":3}  2
5   3       Podpora     Default:showPage        {"id":4}  1
6   3       Prodej      Default:showSitemap     {"id":5}  2

Továrnička v presenteru:

protected function createComponentNavigation($name) {
	// Načtení z DB je lepší mít v modelu
	$items = $this->db->select('menu1.*')
				->setFlag('distinct')
				->from('menu')->as('menu1')
				->leftJoin('menu')->as('menu2')
				->on('menu1.id = menu2.parent')
				->orderBy('menu1.`parent`, menu1.`order`');
	
	$navigation = new Navigation($this, $name);
	
	// Hlavní stránka je definována pevně v presenteru
	$navigation->setupHomepage("Hlavní stránka", $this->link("Default:default"));
	
	// Root
	$menu[0] = $navigation;
	
	foreach($items as $item) {
		// Vytvoření odkazu - s parametry / bez parametrů
		if(!is_null($item->params)) $link = $this->link($item->link, json_decode($item->params, true));
		else $link = $this->link($item->link);
		
		// Vytvoření položky navigace
		$menu[$item->id] = $menu[$item->parent]->add($item->name, $link);
		
		// Je položka navigace aktivní?
		if(Environment::getHttpRequest()->getUri()->isEqual($link)) $current = $menu[$item->id];
	}
	
	// Nastavení aktivní položky
	if(isset($current)) $navigation->setCurrent($current);
}

About

Control pro Nette Framework usnadňující tvorbu menu a drobečkové navigace


Languages

Language:PHP 100.0%