$presenter->isLinkCurrent na modul
- Jiří Nápravník
- Člen | 710
Funguje nějak kontrola na modul v šabloně?
Mám například presentery
ForumModule/AdminModule/TopicPresenter.php
ForumModule/AdminModule/ThreadPresenter.php
a chtěl bych aby se mi zvýraznilo v menu, pokdu budu v modulu ForumModule (příp. může být i ForumModule/AdminModule/)
zkoušel jsem takto:
$presenter->isLinkCurrent(‚Forum:*‘) – a dostanu, že nemůže najít
presenter (logicky, jelikož ho hledá relativně k tomu modulu, v kterém
zrovna jsem
$presenter->isLinkCurrent(‚:Forum:*‘) – tak dostanu stejný error, jen s tím, že ho hledá v app/presenters
Zatím to řeším tak, že mám v BasePresenteru kontrolu vlastní.
Editoval Jiří Nápravník (11. 11. 2013 15:36)
- frosty22
- Člen | 373
Jo a jen jako doplněk vůbec nezáleží jestli máš ten presenter v „app/presenters“ a nebo třeba v „libs/foo/blbost/bar/“ … na cestách nezáleží.
Záleží na tom v jakém je presenter namespace. Od verze 2.1.? (nvm přesně) lze definovat již namespace pro presentery vlastní, třeba App*Module*Presenter …
Příklady:
default – hledá v aktuálním presenteru
actionDefault
Foo: – hledá výchozí akci presenteru s názvem Foo
v aktuálním modulu
Foo:bar – hledá akcí bar v presenteru s názvem Foo
v aktuálním modulu
:Foo:SubFoo:Bar:baz – s dvojtečkou na začátku by to snad
měla již být absolutní cesta, takže hledá v tomhle případě hledá
modul Foo:SubFoo v něm presenter Bar a
v něm akci baz
.. což modul s názvem Foo:SubFoo se přeloží ve výchozím stavu na namespace FooModule\SubFooModule .. a následně tedy presenter na třídu BarPresenter
- Majkl578
- Moderator | 1364
isLinkCurrent
s moduly neumí. Používám něco takového:
public function isModuleCurrent($module)
{
$module = trim((string) $module);
$pos = strrpos($this->getName(), ':');
$current = $pos !== FALSE ? substr($this->getName(), 0, $pos + 1) : NULL;
if ($current === NULL) {
return $module === '';
}
return Strings::startsWith($current, $module . ':');
}
Usage:
<li n:class="$presenter->isModuleCurrent('Foo:Bar') ? active">
což bude TRUE
pro jakýkoliv presenter (i submodul)
Foo:Bar:*
.
- Jiří Nápravník
- Člen | 710
frosty: díky za upřesnění, u mě namespace kopírují adresáře, tak jsem to zaměnil trochu…
Majkl: díky, něco hodně podobného používám