Univerzální routa pro statický, multijazykový web?

Alsatian
Člen | 175
+
0
-

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)

duke
Člen | 650
+
0
-

Určitě toho půjde docílit např. pomocí globálních filtrů.

Alsatian
Člen | 175
+
0
-

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?

CZechBoY
Člen | 3608
+
0
-
$router[] = new Route('[<locale=cs [a-z]{2}>/][<action>/]', [
Alsatian
Člen | 175
+
0
-

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

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');