ifCurrent pro dynamicky načítané statické stránky
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Oli
- Člen | 1215
Ahoj
mám v databázi tabulku se statickejma stránkama a potřeboval bych aby
fungovalo označení aktuální stránky podle slugu. Teď funguje tohle:
<a {ifCurrent :Frontend:Pages:detail 5}class="active"{/ifCurrent} n:href=":Frontend:Pages:detail 'o-nas'">O nás</a>
a já bych potřeboval aby fungovalo tohle:
<a {ifCurrent :Frontend:Pages:detail 'o-nas'}class="active"{/ifCurrent} n:href=":Frontend:Pages:detail 'o-nas'">O nás</a>
Předpokládám, že to bude něco v routování. Teď routuju podle Jan Smitka:
Routování podrobně.
V routeru:
$page = $this->page;
$pageRoute = new PageRoute('[<parent>/]<id>', array(
'module' => 'Frontend',
'presenter' => 'pages',
'lang' => 'cs',
'action' => 'detail',
'id' => array(
Route::FILTER_OUT => function ($id) use ($page)
{
if (!is_numeric($id))
{
return $id;
} else
{
return $page->getRows($id)->slug;
}
}
),
'parent' => array(
Route::FILTER_OUT => function ($parent) use ($page)
{
if (!is_numeric($parent))
{
return $parent;
} else
{
return $page->getRows($parent)->slug;
}
}
),
));
$pageRoute->page = $this->page;
$router[] = $pageRoute;
v pageRouteru:
public function match(\Nette\Http\IRequest $httpRequest)
{
/**
* @var \Nette\Application\Request
*/
$appRequest = parent::match($httpRequest);
if ($appRequest != null && !is_numeric($appRequest->parameters['parent']))
{
$page = $this->page->getBySlug($appRequest->parameters['parent']);
if (!$page)
{
$page = null;
} else
{
$page = $page->id;
}
$params = $appRequest->parameters;
$params['parent'] = $page;
$appRequest->parameters = $params;
}
if ($appRequest != null && !is_numeric($appRequest->parameters['id']))
{
$page = $this->page->getBySlug($appRequest->parameters['id']);
if (!$page)
{
return null;
}
$params = $appRequest->parameters;
$params['id'] = $page->id;
$appRequest->parameters = $params;
}
return $appRequest;
}