Nepovinné parametry na začátku route patternu
- Ondřej Mirtes
- Člen | 1536
Ahoj,
potřeboval bych něco takovéhleho:
$router[] = new Route('[<lang>/]<presenter>[/<name>]', array(
'lang' => 'cs',
'presenter' => 'Default',
'name' => 'NULL',
);
Tedy aby /neco vedlo na NecoPresenter a lang=cs a /en/neco na NecoPresenter s lang=en.
Odmysleme si, že bych v aplikaci měl EnPresenter :)
Pokud si myslíte, že je to dobrý nápad, tak zahlasujte (+1), pokud ne, tak mi řekněte, jak to elegantně vyřešit, pokud navíc s touto funkčností potřebuju víc rout.
- Patrik Votoček
- Člen | 2221
A jak by nette poznalo že /foo/bar
není
array('lang' => "foo", 'presenter' => "Bar")
ale
array('lang' => "cs", 'presenter' => "Foo", 'name' => "bar")
?
- ales.kafka
- Člen | 34
<?php
$router[] = new Route('[<lang [a-z]{2}>/]<presenter>[/<name>]', array(
'lang' => 'cs',
'presenter' => 'Default',
'name' => 'NULL',
);
?>
By mělo fungovat jen s omezením, že presentery budou mít délku názvu
rozdílnou od 2, což nejspíš není problém. Případně by šlo přímo
vypsat podporované jazyky [<lang cs|en>/]
- Patrik Votoček
- Člen | 2221
btw ono to nefunguje? protože podle Docky by mělo https://doc.nette.org/…tion/routing#…
- Filip Procházka
- Moderator | 4668
Tohle přeci funguje, jenom bych možná omezil vstupní hodnoty
$langMeta = array( // použití ve více routách
Route::VALUE => 'cs',
Route::FILTER_IN => function ($lang) {
return in_array($lang, array('cs', 'en')) ? $lang : NULL;
}
);
$router[] = new Route('[<lang [a-z]{2}>/]<presenter>[/<name>]', array(
'lang' => $langMeta,
'presenter' => 'Default',
'name' => 'NULL',
);
- David Grudl
- Nette Core | 8218
Bezpochyby to funguje a lze to napsat i jedním řádkem:
$router[] = new Route('[<lang=cs [a-z]{2}>/]<presenter=Default>[/<name>]');
nebo s výčtem jazyků:
$router[] = new Route('[<lang cs|en>/]<presenter=Default>[/<name>]');
- Tomáš Votruba
- Moderator | 1114
Přidávám ukázkové řešení i pro adresy typu:
// pro $lang = cs
http://neco.cz/ vs.
http://neco.cz/ukazka vs.
http://neco.cz/koupit vs.
// pro $lang = en
http://neco.cz/en/
http://neco.cz/en/preview
http://neco.cz/en/buy
Ideální by bylo http://neco.cz/en/preview
bez
/en/
při zachování $lang = en
, ale to už je na mě
moc (a frustrační tolerance pro tento týden již byla vyčerpána).
Pokud víte, poraďte prosím, díky.
<?php
// bootstrap.php
Route::addStyle('#en-presenter', 'presenter');
Route::setStyleProperty('#en-presenter', Route::FILTER_TABLE, array(
'prewiev' => 'Ukazka', // UkazkaPresener.php, dělal jsem to na českých názvech (omlouvám se), přepsat na anglické nebude problém
'buy' => 'Koupit', // KoupitPresenter.php
));
/* přidání jazyka cs */
$router[] = new Route('<presenter [a-z]{3,50}>/<action>', array( // tady je potřeba aby název presenteru byl větší než 2, tedy aby to detekovalo $lang, jinak jestli jde něco jako {3+}, jsem pro ;)
"lang" => "cs",
"presenter" => "Homepage",
"action" => "default"
));
/* přidání jazyka en */
$router[] = new Route('en/<presenter #en-presenter>/<action>', array(
"lang" => "en",
"presenter" => "Homepage",
"action" => "default"
));
// @layout / neco.latte
<a n:href="Reference:default lang => $lang" ...
?>