Vlastní router & styly,filtry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oggy
Člen | 306
+
0
-

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

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

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

V jaké tabulce je sloupec url_cs?

Oggy
Člen | 306
+
0
-

Jan Tvrdík napsal(a):

V jaké tabulce je sloupec url_cs?

v tabulce Sekce na kterou je navázána tabulka Presenter
Každá sekce/stránka má url..title…atd atd .. a poté je určen presenter, který jí zpracuje..

Jan Tvrdík
Nette guru | 2595
+
0
-

Viděl bych to na chybu návrhu, protože nedokážeš od PresenterRequest odvodit url adresu.

Oggy
Člen | 306
+
0
-

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)

Oggy
Člen | 306
+
0
-

nebo mě napadá přidat si povinný parametr url…

a potom volat.. ten daný presenter. a url předávat v paramtru..