routování či stavba
- Jack06
- Člen | 168
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
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
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?
- Ondřej Mirtes
- Člen | 1536
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.
- Jack06
- Člen | 168
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.