NavigationBuilder – udělátko pro dynamické skládání navigace
- Mikulas Dite
- Člen | 756
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
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
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
.
- forkman
- Člen | 72
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
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
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
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
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.
- mirdič
- Člen | 41
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 | 799
Zjevně hovoříš o Navigation addonu…
Jakým směrem ti to nefunguje? Pokud se nevykresluje nic, je možné, že nenastavuješ aktuální prvek…
- David Ďurika
- Člen | 328
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