Seite 1 von 1

cUri und Sprachen

Verfasst: Mi 30. Dez 2020, 20:35
von bodil
Hallo!
Eine mehrsprachige Seite betreibe ich so, dass das AMR den URLs den Namen der Sprache (de, en, fr ...) voranstellt. Ich habe einen Sprachschalter gebaut und bin dabei auf eine Merkwürdigkeit gestoßen. Die Daten hole ich per SQL aus der Datenbank. Ich kann die URLs mit cUrl zusammenbauen:

Code: Alles auswählen

$prob = array('idcat' => $db->f('idcat'), 'lang' => $db->f('idlang'));
$url = cUri::getInstance()->build($prob);
Das funktioniert aber nicht. Statt den URLs die passende Sprache voranzustellen, wird immer die Sprache der aktuellen Sprachversion vorangestellt. Auf der französischen Seite also:

/fr/Willkommen/index.html
/fr/Welcome/index.html
/fr/Bienvenue/index.html

Das Problem lässt sich lösen, wenn ich die URLs so baue:

Code: Alles auswählen

$url = 'front_content.php?idcat=' . $db->f('idcat') . '&changelang=' . $db->f('idlang');
Ergebnis:

/de/Willkommen/index.html
/en/Welcome/index.html
/fr/Bienvenue/index.html

Weiß jemand, warum das nicht mit cUri klappt? Die Seite läuft auf Contenido 4.10.0, PHP 7.4.3.
Vielen Dank!
Bodil

Re: cUri und Sprachen

Verfasst: Mi 30. Dez 2020, 22:33
von xmurrix
Hallo Bodil,

vor der Zeit schöner URLs wurde der Sprachwechsel in CONTENIDO mit folgenden Link realisiert:

Code: Alles auswählen

front_content.php?idart=22&lang=1&changelang=2
In CONTENIDO wird die Sprache in der Session gespeichert und ein Sprachwechsel ist nur mit dem Parameter "changelang" möglich.

Wenn man cUri verwendet, sollte man Links zu anderen Sprachen daher wie folgt bauen:

Code: Alles auswählen

$prob = array('idcat' => $db->f('idcat'), 'iang' => cRegistry::getLanguageId(), 'changelang' => $db->f('idlang'));
$url = cUri::getInstance()->build($prob);
Gibt man den Parameter "changelang" nicht an, wird cUri (bei AMR die cUriBuilderMR) die id der aktuellen Sprache verwenden, ein angegebener Parameter "idlang" wird dabei ignoriert.

Gruß
xmurrix

Re: cUri und Sprachen

Verfasst: Mi 30. Dez 2020, 22:51
von bodil
Hallo xmurrix!
Vielen Dank! Das hat geholfen! Allerdings muss der Parameter im Array wohl »lang« heißen, mit »idlang« gibts einen Fatal Error:

Code: Alles auswählen

PHP Fatal error:  Uncaught cInvalidArgumentException: $param[lang] must be set! in (...)
Jetzt klappts! Perfekt!
Grüße!
bodil

Re: cUri und Sprachen

Verfasst: Mi 30. Dez 2020, 23:05
von xmurrix
...Allerdings muss der Parameter im Array wohl »lang« heißen, mit »idlang« gibts einen Fatal Error:...
Danke, ich habe das korrigiert.