Pridanie classu active na konkretnej podstranke

Tomas8698
Člen | 109
+
0
-

Zdravim chcel by som sa spytat ako kontrolujete na ktorej podstranke momentalne ste. Ja na stranke si to kontrolujem cez

$presenter->isCurrent($row->id) ? active

Len problém mam v tom že na mi to nefunguje na novo pridanej stránke mi to neprida class, jednoducho to vyhodnoti ze sa nezhoduje s id presentera. Aj ked si to vypisem co mi vraca tak mi nevrati nic na konkretnej podstranke. Na ostatnych mi vraca 1.
Dakujem za radu :)

Editoval Tomas8698 (1. 5. 2021 10:27)

Marek Bartoš
Nette Blogger | 1280
+
+1
-

Který presenter má metodu isCurrent()? Taková v Nette není.

Tomas8698
Člen | 109
+
0
-

to mam v layout latte kontrolujem si to na mieste kde sa mi dynamicky pridava menu. A to som nevedel každopadne dakujem a pouzit ifCurrent ? na forum som to nasiel že niekto to použil na rovnaku kontrolu. :)

Takto vyzera kod

{foreach $pages->getChildNodes() as $row}
					<li id='menuid-{$row->id}'>
						<div n:class='!$row[published]  ? unpublished, $presenter->isCurrent($row->id) ? active'>
							<a n:href='Pages:edit $row->id'>{$row->name}</a>
						</div>
Marek Bartoš
Nette Blogger | 1280
+
0
-

Voláš metodu presenteru isCurrent(), kterou presenter v Nette nemá (má jen isLinkCurrent() a isModuleCurrent()), takže ji musíš mít definovanou ve svém presenteru. Bez znalosti implementace ti k tomu nedovedu já a ani nikdo jiný říct víc.

Makro {ifCurrent} je deprecated, nahradila ho funkce isLinkCurrent() a chová se to stejně jako stejnojmenná metoda presenteru. Ta by fungovat měla, ale porovnává odkazy, nikoli ID záznamu, takže bys tomu měl předat stejné hodnoty jako do odkazu – Pages:edit $row->id

Já bych to asi dělal tak, že bych si v presenteru předal aktuální záznam do template, například takto $this->template->current = $this->currentRow a v šabloně pak porovnával $currentRow->id === $row->id

Tomas8698
Člen | 109
+
0
-

@MarekBartoš dakujem pomohlo mi to :)