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
+
0
-

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)

mkoubik
Člen | 728
+
0
-

Já používám:

use Nette\Util\Strings;
...
Strings::startsWith($presenter->name, 'Module:');

Zase tak šílený to není, ale možná existuje lepší možnost a nevím o ní.

stekycz
Člen | 152
+
0
-

Vzhledem k tomu, co je v API dokumentaci, tak bych zkusil:

<?php

$presenter->isLinkCurrent("Module:*:*");

?>
PavelJurasek
Člen | 39
+
+1
-

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)

erzzo
Člen | 49
+
0
-

Super, šlo to… bez dvojbodky ale len :)