id to slug – všechny stránky z db nebo mnoho dotazů?
- xtbman
- Člen | 24
ahoj, mám routu
<?php
$frontRouter[] = new Route('[<lang=cs (cs|en)>/][<action ('.implode($container->parameters['pages'], '|').')>][/<id>]', 'Homepage:default');
//pokud statická stránka neexistuje dohledá se v db
$frontRouter[] = new Route('[<lang=cs (cs|en)>/]<id>', array(
'presenter' => 'Homepage',
'action' => 'article',
'id' => array(
Route::FILTER_IN => array($container->pageControl, 'getIdByUrl'),
Route::FILTER_OUT => array($container->pageControl, 'getUrlById')
)
));
?>
ale nastává problém, když se překládá „getUrlById“ protože pokud je na stránce velké množství dotazů, tak se do db dotazuji třeba i 10× což mi nepřijde zrovna geniální.
<?php
public function getUrlById($id)
{
return $this->db->query("SELECT [webalized_title] FROM [pages] WHERE [id] = %i", $id)->fetchSingle();
}
?>
taky je možnost vytáhnout všechny stránky do asociativního pole id ⇒ webalized_title ale při velkém množství stránek to bude ještě horší.
Jak to řešíte vy?
Díky za rady :-)
Editoval xtbman (8. 11. 2012 17:29)
- xtbman
- Člen | 24
Nad tím jsem také přemýšlel, ale pokud těch stránek bude opravdu
hodně, tak možná těch x dotatů do db bude rychlejší než unserialize tak
velikého pole.
Možná ideální by bylo tvořit odkazy rovnou:
<?php
n:href="Homepage:article id=>$webalized"
?>
a pak v akci presenteru dohledat pouze ID k tomu webalizovanému
stringu.
Zajímalo by mě zda by to šlo udělat už v routě. Url by zůstala
neměnná, ale parametr ID by presenteru předával integer id.
Editoval xtbman (10. 11. 2012 11:35)