cUri und Sprachen

Alles rund um Module und Plugins in CONTENIDO 4.10.
Antworten
bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

cUri und Sprachen

Beitrag von bodil » Mi 30. Dez 2020, 20:35

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

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: cUri und Sprachen

Beitrag von xmurrix » Mi 30. Dez 2020, 22:33

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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: cUri und Sprachen

Beitrag von bodil » Mi 30. Dez 2020, 22:51

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

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: cUri und Sprachen

Beitrag von xmurrix » Mi 30. Dez 2020, 23:05

...Allerdings muss der Parameter im Array wohl »lang« heißen, mit »idlang« gibts einen Fatal Error:...
Danke, ich habe das korrigiert.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Antworten