ifCurrent – možná zvláštní chování
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- oldrich.valek
- Člen | 21
Detekuji aktuální položku v menu. Menu se vytváří v basePresenteru v beforeRenderu přibližně takto:
<?php
$menuArray = array();
foreach($this->context->Page->getList() as $page) {
$menuArray[$page->title] = array(
"signal" => "Page:default",
"params" => array("pageID" => $page->id, "pageTitle" => $page->title)
);
}
?>
K věci důležitá část routeru vypadá asi takto:
<?php
Route::addStyle('#title');
Route::setStyleProperty('#title', Route::FILTER_OUT, function($url) {
return Strings::webalize($url);
});
...
$frontRouter[] = new FilterRoute('<pageID [0-9]* >-<pageTitle #title>/', array(
'presenter' => 'Page',
'action' => 'default',
'pageID' => array(
Route::FILTER_IN => callback($this->customFilters, "checkPageID")
)
));
?>
Problém je v tom, že když potom v šabloně při vypisování menu použiji:
{ifCurrent $page['signal'] (expand) $page["params"]}class="active"{/ifCurrent}
Tak to kupodivu nefunguje. Zřejmě je to proto, že na title stránky používám v routování filter Strings::webalize, takže když to potom nějak porovnává, tak se to liší a podmínka neprojde. Obešel jsem to jednoduše. Přidal jsem před to:
{? $page['params']['pageTitle'] = Nette\Utils\Strings::webalize($page['params']['pageTitle'])}
Možná že dělám něco blbě… ale nemělo by to ten filter aplikovat samo?
verze nette: 2.0.10