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

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