Zvýraznění aktuálního modulu v menu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- thunderbuff
- Člen | 164
Píšu docela robusní aplikaci, tak jsem se rozhodl využít modulů. V horním menu mám záložky jednotivých modulů a v levém menu mám odkazy na jednotlivé presentery a akce. Lze nějak „neprasácky“ zvýraznit aktuální modul v horním menu?
Jinými slovy:
Kód níže označí jako current akci resenteru, lze to nějak předělat na označení presenteru v modulu?
<?php
$presenter->isLinkCurrent("Presenter:*")
//Hledám funkční variantu tohoto:
$presenter->isLinkCurrent("Module:*")
?>
Napadlo mě pouze řešení parsováním hodnoty vrácené z $presenter->getName(), ale přijde mi to šílené
Editoval thunderbuff (10. 8. 2012 15:11)
- PavelJurasek
- Člen | 39
Já si přidal do svého presenteru
/**
* @param string $module
* @return boolean
*/
public function isModuleCurrent($module)
{
if (!$a = strrpos($this->name, ':')) { // not in module
return false;
}
return ltrim($module, ':') === substr($this->name, 0, $a);
}
a v latte
<a n:class="$presenter->isModuleCurrent('Modul:Submodul') ? current"> // nebo i s úvodní dvojtečkou <a n:class="$presenter->isModuleCurrent(':Modul:Submodul')">
<a n:class="$presenter->isModuleCurrent('Front') ? current"> // nebo i s úvodní dvojtečkou <a n:class="$presenter->isModuleCurrent(':Front')">
nebo pokud si nechceš dědit presenter, tak třeba v bootstrapu
\Nette\Application\UI\Presenter::extensionMethod('isModuleCurrent', function(\Nette\Application\UI\Presenter $that, $module) {
if (!$a = strrpos($that->name, ':')) { // not in module
return false;
}
return ltrim($module, ':') === substr($that->name, 0, $a);
});
Editoval PavelJurasek (12. 8. 2012 22:59)