Vlastní router & styly,filtry
- Oggy
- Člen | 306
Chtěl bych požádat o nakoupnutí:-) a radu..jakou cestou se vydat a proč:
Mám tabulku sekce: (url,..,..,presenterId) pak tabulku presenter (presenterId..,name)
některé tvary, kterých bych rád docílil:
www.domena.cz/o-nas → module=>Front, presenter=>Page, action=>default, id=>NULL, lang=>cs
www.domena.cz/kapesnik → Front, Page, default,id=>kapesnik, cs
en.domena.cz/kontakty → Front, Contact, default, id, lan=>en
Je lepším řešením vlastní router nebo styly(filtry..nevím jak to pojmenováváte)
Zkoušel jsem obě cesty, ale ne moc úspěšně (je tu můj první web v nette)..
Problémy, které přineslo nastavení stylů zde: https://forum.nette.org/…techto-tvaru#11
Nebo jsem zkoušel napsat vlastní router.. který nějak tak fungoval zatím pro určování presenteru podle url ..
nevím jestli sem vkládat kód..asi to není to pravé ořechové..spíš mi
jde o nějaký „algoritmus“..
Kdy dědit od třídy Route..kdy si napsat router jen implementující rozhraní
IRouter..
Jak pak tvořit linky v šabloně..viz problém: https://forum.nette.org/…lem-s-odkazy#13
Editoval Oggy (30. 8. 2009 19:41)
- Oggy
- Člen | 306
Tak možná jsem ten dotaz položil moc široce..
Jedna z variant se náramně podobá té kterou tady David zveřejnil https://forum.nette.org/…ovnove-routy#12
můj kus metody match z vlastního routeru
<?php
....
$query = dibi::select('presenter.nazev')->from('sekce')->join('presenter')->on('sekce.presenterId = presenter.presenterId')->where('url_cs = %s', $url);
$presenterName = $query->fetchSingle();
if ($presenterName == NULL) {
return NULL;
} else {
$presenter = 'Front:'.$presenterName;
}
...
?>
Jde vlastně je o to, že Jméno toho daného presenteru načtu z databáze.. a trouble u mě nastal, když jsem chtěl genrovat v šabloně linky… Protože to nějak nezkouslo tvar s pomlcku (např. o-nas) ..
šablona:
<?php
{link "$zalozka->url_cs:"}
?>
chyba: presentern name must be alplhanumeric ..
Jak vlastně Nette generuji ty linky..prohání je přes ten router?
- Oggy
- Člen | 306
Nebo jsem zkoušel jít cestou přes nastavení stylu:
<?php
$sekce = new Sekce();
Route::setStyleProperty('presenter', Route::FILTER_IN, array($sekce,'getPresenterName'));
Route::setStyleProperty('presenter', Route::FILTER_OUT, tady nevim co volat);
$router[] = new Route('<presenter>/<action>/<id>', array(
'module' => 'Front',
'presenter' => 'Home',
'action' => 'default',
'id' => NULL,
));
?>
metoda z tridy Sekce:
<?php
public function getPresenterName($url)
{
$query = dibi::select('presenter.nazev')->from('sekce')->join('presenter')->on('sekce.presenterId = presenter.presenterId')->where('url_cs = %s', $url);
$presenterName = $query->fetchSingle();
return $presenterName;
}
?>
Tady mi nějak nejde do hlavy.. co volat pro FILTER_OUT ..
Jeden presenter může obsluhovat více stránek.. takže nejde vrátit
getUrlByPresenterName nebo něco takového..
Děkuju za každou radu.. nějak už nevím jak to zkoušet jinak..co je asi „nejsprávnější“ :-)
- Jan Tvrdík
- Nette guru | 2595
Viděl bych to na chybu návrhu, protože nedokážeš od
PresenterRequest
odvodit url adresu.
- Oggy
- Člen | 306
Jan Tvrdík napsal(a):
Viděl bych to na chybu návrhu, protože nedokážeš od
PresenterRequest
odvodit url adresu.
ha… no nejspíš jo.. přišlo mi to fajn mít možnost si určit v administraci jakým způsobem se bude Sekce vykreslovat..jestli to bude seznam článků (což dělá presenter X) nebo holý text (presenter Y) nebo výpis z nějaké jiné tabulky (Presenter Z) což by znamenalo ..třeba 30 stránek na web.. a k jejich zpracování 5 presenteru..
šlo o to dosáhnout těhle tvarů:
www.domena.cz/o-nas → presenter=>Page, action=>default, id=>NULL, lang=>cs
www.domena.cz/kapesnik → presenter=>Page, action=>default,id=>kapesnik, lang=>cs
en.domena.cz/kontakty → presenter=>Contact, action=>default, id=>NULL, lan=>en
Zajímalo by mě jak tedy funguje tohle? https://forum.nette.org/…ovnove-routy#12
Kdy podle url..zjistí, že fat-absorber je product a zavolá Presenter Product.. to je defacto stejný princip..co jsem tu chtěl mít já..
a zpetně jak vytváří v šabloně link? ..
Editoval Oggy (1. 9. 2009 8:49)