NavigationBuilder – udělátko pro dynamické skládání navigace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mikulas Dite
Člen | 756
+
0
-

Zajímavé by bylo automaticky detekovat akktivní link. Chtěl sem to implementovat sám, ale žádný hezký způsob sem nenašel.

rokerkony
Člen | 122
+
0
-

Mikulas Dite napsal(a):

Zajímavé by bylo automaticky detekovat akktivní link. Chtěl sem to implementovat sám, ale žádný hezký způsob sem nenašel.

pokud myslíme oba to stejné, tak to tam už honza marek má :-) koukni na metodu setCurrent()
jako parametr má právě aktivní složku :)

Editoval rokerkony (3. 5. 2010 0:10)

Mikulas Dite
Člen | 756
+
0
-

No jasně že se ten aktivní dá nastavit manuálně. Já bych ale rád menu vytvořil v basePresenteru a potom na to dál nešahal; kdyby se setCurrent nezavolal, tak by to nějak current samo vygenerovalo z $presenter->action, resp. name.

rokerkony
Člen | 122
+
0
-

no ja to mám tak, že porovnávám právě $presenter->action … i když je to dost prasácký… na jiný způsob jsem nepřišel…

forkman
Člen | 72
+
0
-

Ahoj pánové, mimochodem taky porovnávám presenter a action, případně něco dalšího, ale v nejnovější verzi (2.1) mi bohužel nejde vůbec zvýrazňování aktivních odkazů. I když nastavím setCurrent ten správný node, tak je current nakonec root, což je novinka a nějak se v tom nevyznám. Nevíte někdo, co s tím? Verze 2.0 bohužel nefunguje s nejnovějším nette.

A mimochodem, ve verzi 2.1 je chyba, tady je moje oprava:

<?php
		$file = '';
		if (!empty($this->templateFile)) {
			$file = $this->templateFile;
		} elseif ($this->template->getFile() == '') {
			if ($this->translator instanceof ITranslator) {
				$file = dirname(__FILE__) . '/template_translate.phtml';
			} else {
				$file = dirname(__FILE__) . '/template.phtml';
			}

		}
		else
		{
      		$file = $this->template->getFile();

	  }
?>

Všechno tkví v posledním else, protože když jsem si chtěl vykreslit na stránce stejnou navigaci 2×, dostal jsem chybu s missing template, protože podmínka nevyhověla ničemu z větvení a $file zůstalo prázdné.

iguana007
Člen | 970
+
0
-

Ahoj všem,
právě jsem se dostal k řešení navigace na jednom portále a klient má požadavek, že si bude moci všechny odkazy v navigaci moci upravovat v administraci. V tom problém není. Výsledkem je tabulka, kde si ukládám jednotlivé položky menu s id, nazvem, parentId, presenterem, akci a id.
Narazil jsem ovsem na problem, jak tuto strukturu vykreslit pomoci tohoto addonu na frontendu.
Rucni vypis je mi jasny, ale jak to zkombinovat s rekurzi dat primo z databaze? Resili jste to uz nekdo pls?
Diky za jakekoli nakopnuti/radu ;)

EDIT: ještě bych rád doplnil, že toto menu může mít x zanoření – proto ta rekurze.

Editoval iguana007 (8. 7. 2010 15:26)

iguana007
Člen | 970
+
0
-

Už jsem to sice vyřešil jinak – a to z příkladu srigiho – pomocí nested set: https://forum.nette.org/…kolem-stromu?…
Ostatně by mě zajímalo jak rozchodit i toto udělátko – tj. jak s jejím použitím vykreslit strom např. o 5ti zanořených úrovních?

Kovik
Člen | 10
+
0
-

misablaha@gmail.com napsal(a):

Narazil jsem na totéž a za pomoci kódu vykradeného z Latte jsem upravil class Navigation od Honzy Marka takto:

U takto upraveného kódu mi nefunguje správné vytvoření URL adresy u vnořených linků. Bohužel se mi chybu nepodařilo najít (jsem tak trochu začátečník). Původní kód od Honzy Marka mi funguje bez problémů :)

Víte někdo kde je chyba? /nebo kde dělám já chybu?/

Ot@s
Backer | 476
+
0
-

Kovik napsal(a):

misablaha@gmail.com napsal(a):

Narazil jsem na totéž a za pomoci kódu vykradeného z Latte jsem upravil class Navigation od Honzy Marka takto:

U takto upraveného kódu mi nefunguje správné vytvoření URL adresy u vnořených linků. Bohužel se mi chybu nepodařilo najít (jsem tak trochu začátečník). Původní kód od Honzy Marka mi funguje bez problémů :)

Víte někdo kde je chyba? /nebo kde dělám já chybu?/

Nevím, jestli to je správná cesta, ale class Navigation ponechávám původní od Honzy Marka, tj. definice položek navigace je v tomto tvaru (s přímým použitím $this->link):

$nav->add("Odkaz", $this->link("Call:police", array("id" => '158')));

Do class NavigationNode extends NComponentContainer jsem přidal:

/** @var bool */
public $isCurrent = false;

a do public function add:

$uri = NEnvironment::getHttpRequest()->getOriginalUri()->getPath();
$navigationNode->isCurrent = ($url==$uri);

Funguje generování vnořených odkazů a „automatické“ označení aktuální položky navigace. Jen nevím, jestli je to z hlediska návrhu/myšlenky košer.

Mesiah
Člen | 240
+
0
-

Ot@s: parada! :))

mirdič
Člen | 41
+
0
-

Pokouším se rozjet NavigationBuilder na nette 2.0.

Menu se mi generuje v pořádku, ale bohužel nemůžu přijít na to, jak vygenerovat breadcrump.

Můžete mi někdo poradit jak modifikovat:

<?php
	/**
	 * Render breadcrumbs
	 */
	public function renderBreadcrumbs() {
		if (empty($this->current)) return;

		$items = array();
		$node = $this->current;

		while ($node instanceof NavigationNode) {
			$parent = $node->getParent();
			if (!$this->useHomepage && !($parent instanceof NavigationNode)) break;

			array_unshift($items, $node);
			$node = $parent;
		}

		$template = $this->createTemplate()
			->setFile(dirname(__FILE__) . "/breadcrumbs.php");
		$template->items = $items;
		$template->render();
	}
?>

Děkuji.

uestla
Backer | 796
+
0
-

Zjevně hovoříš o Navigation addonu…

Jakým směrem ti to nefunguje? Pokud se nevykresluje nic, je možné, že nenastavuješ aktuální prvek…

mirdič
Člen | 41
+
0
-

To: uestla, přesně tak, zapomněl jsem nastavit aktuální prvek. Díky za pomoc!

David Ďurika
Člen | 328
+
0
-

Zdravim ja tiez pouzivam addon Navigation a mam 2 ‚how to‘ otazky:
1. ako dynamicky (napr z DB) doplnate navigaciu
2. ako sa dynamicky nastavuje $navigation->setCurrent();

dakujem

simPod
Člen | 383
+
0
-

povedlo se nekomu vyresit to nastavovani parentu na aktivni? dik