Univerzální routa pro statický, multijazykový web?
- Alsatian
- Člen | 175
Ahoj.
Dá se, prosím, napsat univerzální routa pro jazykové mutace (velmi jednoduchého, statického) webu?
www.neco.cz/ – presenter
uvod_cz
www.neco.cz/en – presenter
uvod_en
…
Zkouším něco jako
$router[] = new Route('[(<lang [a-z]{2}>)/]', 'StaticPages:uvod_$1');
- kde $1 dosadí výsledek v závorce "", „en“, „de“…
- pro každou stránku (bude vždy jedna pro jeden jazyk) mám latte uvod_cz.latte, uvod_en.latte …
- samozřejmě moje „zkouším něco jako“ nefunguje, $1 se používá v htaccess souborech.
Moc děkuji za nakopnutí :)
Editoval Alsatian (16. 9. 2018 12:02)
- Alsatian
- Člen | 175
Vytvořil jsem si v routeru statickou proměnnou,
public static $thisLocale = 'cs';
do které uložím stav locale pro doplnění v action
$router[] = new Route('[<locale=cs [a-z]{2}>/]', [
'locale' => [
Route::FILTER_IN => function($locale) {
self::$thisLocale = $locale;
return $locale;
},
Route::FILTER_OUT => function($locale) {
self::$thisLocale = $locale;
return $locale;
},
],
'presenter' => 'StaticPages',
'action' => [
Route::FILTER_IN => function($action) {
return 'uvod_'.self::$thisLocale;
},
Route::FILTER_OUT => function($action) {
return 'uvod_'.self::$thisLocale;
},
],
]);
Funguje to, ale web se mi přesměrovává na tuhle adresu:
nazevdomeny.cz/?action=uvod_cs (pro default cesky jazyk)
nazevdomeny.cz/en/?action=uvod_en (pro anglictinu)
Jak se toho zbavit a mít v url jenom nic nebo /en?
- Alsatian
- Člen | 175
@CZechBoY
Tohle se mi přesměrovává na
/static-pages/ - pokud mám v url / (Česká verze
/en/static-pages/ - pokud mám v url (EN verze)
Přibylo tedy nepříjemné „static-pages“ v URL…
CZechBoY napsal(a):
$router[] = new Route('[<locale=cs [a-z]{2}>/][<action>/]', [
Editoval Alsatian (16. 9. 2018 19:07)
- Martk
- Člen | 661
A nebude stačit jen upravit metodu formatTemplateFiles v presenteru?
class StaticPagesPresenter extends BasePresenter {
/** @var string @persistent */
public $locale;
public function formatTemplateFiles(): array {
[, $presenter] = Helpers::splitName($this->getName());
$dir = dirname($this->getReflection()->getFileName());
return [
"$dir/templates/$presenter/{$this->getView()}_{$this->locale}.latte",
];
}
}
a bude ti stačit
$router[] = new Route('[(<lang [a-z]{2}>)/]', 'StaticPages:uvod');