[addon navigation] Navigation
- Honza Kuchař
- Člen | 1662
Diskuse ke stránce Navigation
Jsem rád, že se tu něco takového objevilo. Usnadní to práci. Díky za to!
- LuKa
- Člen | 3
Řeším takovou věc. Mám různé presentery závislé na BasePresenteru a v něm mám funkci createComponentNavigation pro vytvoření menu.
Ale nevím jak mám nastavit pro jednotlivé presentery aktuální menu funkcí setCurrent().
Zkouším tu funkci volat treba z presenteru Clanky, ale nic se nestane ani chybu to nehodí. menu se zobrazí, ale aktivní se neoznačí.
Nevíte někdo jak to udělat.
Díky za pomoc
Už jsem to vyřešil, díky za pomoc.
Editoval LuKa (15. 6. 2010 11:27)
- Honza Marek
- Člen | 1664
V nejnovější verzi takto:
// v továrničce v BasePresenteru
$navigation->add("Sekce", $this->link("Sekce:"))
->setAsCurrent($this->name === "Sekce" && $this->action === "default");
// doufám, že jméno presenteru se dá zjistit $this->name ;)
ve starších verzích je nutné toto:
$sekce = $navigation->add("Sekce", $this->link("Sekce:"));
if ($this->name === "Sekce" && $this->action === "default") {
$navigation->setCurrent($sekce);
}
- Podbor
- Člen | 19
Zdravím,
tato komponenta se mi jeví jako velmi užitečná, a tak bych jí rád
zakomponoval do své aplikace. Stáhl jsem si tedy soubory „Navigation.php“
a „NavigationNode.php“ do adresáře \Moje-aplikace\libs\Navigation\
Třída Navigation dědí „Controler“, a tak jsem před ni do souboru
dopsal:
<?php
use Nette\Application\Control;
?>
A zde je vše v pořádku. Potíž dělá druhá třída, která dědí ComponentContainer.
<?php
use Nette\ComponentModel\ComponentContainer;
?>
Zde mi laděnka stále hlásí:
*
Fatal Error
Class ‚Nette\ComponentModel\ComponentContainer‘ not found
*
A s tím si nějak nevím rady. :-( Používám verzi Nette 2.0 pro PHP
5.3.
Setkal se někdo s něčím podobným ?
EDIT: Omlouvám se, ale už se mi to podařilo vyřešit. Nahrál jsem tu
Navigaci do špatného adresáře a ještě mi k tomu chyběly phtml soubory
„menu.phtml“ a „breadcrumbs.phtml“.
Pokud to nevadí, tak můj příspěvek klidně smažte.
Editoval Podbor (20. 3. 2011 18:27)
- Filip Procházka
- Moderator | 4668
To bude nejspíše tím, že třída
Nette\ComponentModel\ComponentContainer
neexistuje. Přestože se
nachází v souboru Nette/ComponentModel/ComponentContainer.php
tak se jmenuje pouze Nette\ComponentContainer
- kralik
- Člen | 230
Ahoj lidičky prosím poraďte,
pokouším se „čarovat“ s touto komponentou.
Rozjel jsem ji ale nevím jak přidat odkaz na další presenter.
Potřeboval bych nakopnout, s Nette teprve začínám.
Používám verzi 2.0 Alpha pro PHP5.3
mám:
presenters
– BasePresenters.php |
– ErrorPresenter.php |
– DocumentPresenter.php |
– HomepagePresenter.php |
templates
– Document |
|- default.latte
– Homepage |
|- default.latte
<?php
protected function createComponentNavigation($name) {
$nav = new Navigation($this, $name);
$nav->setupHomepage("Úvod", $this->link("Homepage:"));
$nav->add("Dokumenty", $this->link("Document:"));
}
?>
HomePage jede ale nefunguje mi odkaz na „Dokumenty“
nevím zda musím ještě nějak upravit Router v bootstrap.php
<?php
$router = $application->getRouter();
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
};
?>
Přečetl jsem něco o Router, ale nějak mi to nění jasné.
Mooc díky
t0m
- kralik
- Člen | 230
Tak už jsem to dal dohromady, díky moc za nakopnutí.
Shrnutí pro nás začátečníky:
Pokud se někdo bude, stejně jako já, potýkat s Routerem a touto
komponentou, tak zde jsou mé poznatky, které mi vše spolu s lidmi zde na
fóru vyřešit.
implementace této komponenty:
obsah zipu jsem nahrál do /libs/Navigation
z distribusce nahrát někam na web_root a spustit
/tools/Requirements-Checker/checker.php a zkontrolovat, měl jsem
disabled mod_rewrite, takže na Apache povolit a je to
BasePresenter
<?php
protected function createComponentNavigation($name) {
$nav = new Navigation($this, $name);
$nav->setupHomepage("Úvod", $this->link("Homepage:"));
$nav->add("Dokumenty", $this->link("Dokument:"));
}
?>
vytvořené 2× Presentery: „Homepage“ a „Dokument“ s obsahem
k tomu mít příslušné šablony, k tomuto jsem využil „sendbox“
z distribuce Alpha 2.0 PHP5.3
bootstrap.php – router v tomto souboru
<?php
$router = $application->getRouter();
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
?>
Takto mi to vše funguje.
I když přepínání mezi těmito 2 stránkami je cca 1s což je celkem dlouho, ale nevím jak to zrychlit a zatím to neřeším.
Díky za pomoc a snad toto někomu dalšímu pomůže
- bojovyletoun
- Člen | 667
Otázka je, jak to bude rychlé na hostingu. Dále Diskuse
některé body (z vlastní zkušenosti,
- eaccelerator
- minified verze nette a dibi
- vypnutý profiler (a další panely)
- dynamická změna frekvence (CPU na noteboocích především) (RmClock) např 1 GHz vs 2 GHz. Pro krátké výkonové špičky se může problém projevit (default transition interval je 200ms).
- webserver
- samozřejmě optimalizace jako taková (kešování odkazů,…)
Editoval bojovyletoun (14. 4. 2011 21:09)
- mr.mac
- Člen | 87
kralik napsal(a):
Shrnutí pro nás začátečníky:
Udělal jsem to podle tebe a stále mi hlásí laděnka Fatal error –
Class ‚Navigation‘ not found. Můžeš prosím tě doplnit jak máš
zajištěno, že se komponenta v libs najde? Chápu, že to je hloupá otázka,
ale nikde jsem nenašel úplný návod pro blbý, jak instalovat komponenty
(Nette 2.0) do svých aplikací. Na stránce https://componette.org/search/?q=
je odkaz jak přidat nové
rozšíření nefunkční. Vůbec je to velká dřina něco rozchodit –
hodně návodů je zastaralých nebo nefunkčních. Vážím si práce autorů
i přispívajících zkušených editorů, ale pro začátečníky stále
hodně nepřehledné až zmatené.
K věci: Ve složce apps/components/Navigation se mi taky nehlásí, přitom
bootsrap mám standardní.
Editoval mr.mac (10. 10. 2011 14:12)
- Ot@s
- Backer | 476
mr.mac napsal(a):
kralik napsal(a):
Shrnutí pro nás začátečníky:Udělal jsem to podle tebe a stále mi hlásí laděnka Fatal error – Class ‚Navigation‘ not found.
K věci: Ve složce apps/components/Navigation se mi taky nehlásí, přitom bootsrap mám standardní.
- Koukni na konfguraci
RobotLoader
u, resp. zda se komponentaNavigation
nachazí v uvedených cestách, např. v config.neon máš%appDir%
,%libsDir%
:
robotLoader:
option:
directory: [%appDir%, %libsDir%]
run: true
Kde %appDir%
, %libsDir%
jsou obvykle definovány
jako konstatny v index.php a v těchto cestách se pak rekurzivně
„skenuje“.
- Ještě je možné, že u komponenty
Navigation
bude definován nějakýnamespace
– pokud ano, musíš ho při volání/použití prefixovat nebo dát na začátek skriptu, kde komponentu používáš,use
.
Editoval Ot@s (10. 10. 2011 14:38)
- mr.mac
- Člen | 87
Ot@s napsal(a):
Díky móóóc. Doplnil jsem si odkaz na cesty v config.neon – komponentu jsem měl ve složce app/components/Nevigation – a nenašla se – myslel jsem si, že robotLoader implicitně app prohledává (asi ano). Doplnil jsem i prefix namespace (možná to byl ten hlavní důvod).
- duskohu
- Člen | 778
Dobry den,
chcel by som sa informovat mam taketo menu v BasePresenter,
ako viem nastavit current page podla aktualnej ktoru si zistiom z aktualneho
presenteru a action
Za radu dakujem.
<?php
public function createComponentNavigation($name) {
$menu = new Navigation($this, $name);
$menu->setupHomepage("Domov", $this->link("Homepage:"));
$menu->add("Charakteristika", $this->link("Homepage:charakteristika"));
$menu->add("Aktivity projektu", $this->link("Homepage:aktivityProjektu"));
$menu->setCurrent(????? Auto ??????);
}
?>
- Ot@s
- Backer | 476
Já to řešil úpravou samotné komponenty (atomaticky testuju link
v metodě add
, kde vkládám lazyLink
).
Když to nebudeš nikde šířit, tak by mohlo provizorně zafungovat něco jako
(netestováno):
// zadani jedne polozky navigace
$tmp = $menu->add("Charakteristika", $this->link("Homepage:charakteristika"));
if ($this->isLinkCurrent("Homepage:charakteristika")) $menu->setCurrent($tmp);
- lunak83
- Člen | 47
Ahoj, dokážete někdo výsledný objekt kešovat, prosím?
Já dostávám při pokusu o uložení do FileStorage cache:
SplObjectStorage::serialize() must return a string or NULL
Případně pokud to zavolám hned po deklaraci tak:
Object serialization is not supported by class Navigation\Navigation
Děkuji předem za nakopnutí.