routování či stavba

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

Opravdu nevím, jak toto nazvat, nicméně se to pokusím napsat. Řeším tento problém:
Mám modulovou aplikaci, v niž mám v hlavním menu pár odkazů:

Hlavní stránka ⇒ HomePagePresenter

Katalog ⇒ CatalogPresenter

O nás ⇒ HomepagePresenter:aboutUs

Kontakty ⇒ HomepagePresenter:contacts

Nevím zda to dělám správně, ale jde mi o to, že proč když mám jenom jednoduché změny dat a uspořádání (šablona), proč dělat zbytečně pro každou tuto primitivní věc nový presenter.

Jenomže co chci, je aby se mi tyto odkazy dělali jako seo-friendly, přičemž jsem myslel že to půjde přes překladovou tabulku, ovšem tam mě to jde pouze obměňovat
link->presenter nikoli link->presenter->funkce. Představoval jsem si to nějak takto:

Route::setStyleProperty('presenter', Route::FILTER_TABLE, array(
    'hlavni-stranka' => 'Homepage:default',
    'registrace' => 'Registration',
    'akcni-nabidky' => 'ActionOffers',
    'katalog-vyrobku' => 'CatalogList',
    'o-firme-lumco' => 'Homepage:aboutLumco',
    'kontakty' => 'Homepage:contactList',
));

nevím, zda by to mělo být funkční, ale mě to nefunguje a proto prosím o radu zkušenější.

Opět zopakuji, že tam kde chci využít jen jeden presenter na více věcí se pouze mění obsah určitého bloku + struktura těch dat tam, takže na každý odkaz je jiná šablona.

Jestli to dělám špatně, nebo na to existuje nějaká vychytávka budu rád. Děkuji

Editoval Jack06 (8. 3. 2010 15:50)

Ola
Člen | 385
+
0
-

Pro action si musíš udělat vlastní překladovou tabulku a odstínit to od presenteru, tedy budeš mít dvě:

Route::setStyleProperty('presenter', Route::FILTER_TABLE, array(
    'registrace' => 'Registration',
    'akcni-nabidky' => 'ActionOffers',
    'katalog-vyrobku' => 'CatalogList',
));

Route::setStyleProperty('action', Route::FILTER_TABLE, array(
    'o-firme-lumco' => 'aboutLumco',
    'kontakty' => 'contactList',
));

K tomu, aby to dělalo to, co zamýšlíš ještě potřebuješ odpovídající routy:

$router[] = new Route('<presenter Registration|ActionOffers|CatalogList|Homepage>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
));
$router[] = new Route('<action>', array(
	'presenter' => 'Homepage'
));

BTW: Asi bych spíše než Homepage zvolil Page nebo něco podobného jakožto název presenteru.

Jack06
Člen | 168
+
0
-

ahááá a já už to někde viděl se dvěma tabulkama ale nepochopil jsem to, nicméně tohle je základ že tam bude těchto pár presenterů těď reaguji na:

$router[] = new Route('<presenter Registration|ActionOffers|CatalogList|Homepage>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
));
$router[] = new Route('<action>', array(
        'presenter' => 'Homepage'
));

tam bude samosebou více presenterů, tak to pak budu muset takto sepsat všechny presentery?

Ola
Člen | 385
+
0
-

Stačí, aby tam bylo jen <presenter>, původně jsem to zamýšlel jinak a pak jsem to nesmazal.

Ondřej Mirtes
Člen | 1536
+
0
-

V tom případě se to ale nerozliší. Když někdo přijde na URL /blabla, tak Nette neuhodne, jestli jde o presenter Blabla či Homepage:blabla action. Varianta s vyjmenovanými presentery, či případně s prohozenými routami a vyjmenovanými akcemi, fungovat bude.

Ola
Člen | 385
+
0
-

Ha, vidíš! Já věděl proč sem to tam dal! Ale pak sem to zapomněl :D

Ola
Člen | 385
+
0
-

Tak to, pravděpodobně, lze vyřešit ještě takto, jedinou routou (asi nejelegantněji):

$router[] = new Route('[<presenter>/]<action>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
));

Editoval Ola (8. 3. 2010 21:13)

Jack06
Člen | 168
+
0
-

Ola napsal(a):

Tak to, pravděpodobně, lze vyřešit ještě takto, jedinou routou (asi nejelegantněji):

$router[] = new Route('[<presenter>/]<action>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
));

Tak jsem to zkoušel a pořád se mi to snaží spustit presenter OFirmeLumcoPresenter, asi se té routě nechce.