Frontend Sprachen mit Modrewrite werden nicht umgesetzt

Gesperrt
Riffer
Beiträge: 5
Registriert: Di 14. Aug 2007, 11:43
Kontaktdaten:

Frontend Sprachen mit Modrewrite werden nicht umgesetzt

Beitrag von Riffer »

Zunächst mal, ich bin nur ein Laie bezüglich Contenido, daher erwartet bitte nicht zu viel von mir. Ich kann zwar programmieren, aber PHP nicht unbedingt ;-)

Version 4.8.7

Wird von aussen auf eine gesperrte Frontend-Seite gesprungen und ist der Benutzer noch nicht eingeloggt, wird auf die (beim Mandaten konfigurierte) Login-Seite umgelenkt.

Dabei wird leider nicht die gewünschte Sprache aufgerufen, sondern die (vermutliche) Default-Sprache (hier Deutsch).

Die aufrufenden Links sehen so aus:

Code: Alles auswählen

http://www.domain.de/deutsch/blubb.html
http://www.domain.de/englisch/blubb.html
http://www.domain.de/francais/blubb.html
...
Ich habe jetzt in die Weiterleitung auf die Default-Seite in

cms/front_crcloginform.inc.php

in folgender Form um den Parameter "changelang" erweitert um den Fehler(?) zu umgehen:

Code: Alles auswählen

$language = substr($_SERVER["REQUEST_URI"],1,4);
$changelang = "";
if ($language == "deut") $changelang = "1";
if ($language == "engl") $changelang = "2";
if ($language == "espa") $changelang = "4";
if ($language == "fran") $changelang = "5";
if ($language == "pols") $changelang = "7";
if ($language == "port") $changelang = "8";
if ($language == "russ") $changelang = "6";
if ($changelang != '') $strErrorUrl .= "&changelang=" . $changelang;
Frage: Gibt es dazu keine hübschere Lösung?
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo,

eigentlich sollte die Sprache vorher erkannt und gesetzt werden, sofern in der Konfiguration des MR-Plugins das Voranstellen der Sprache aktiviert wurde.

Was steht eigentlich in der Variablen $lang für ein Wert drin, wenn die front_crcloginform.inc.php ausgegeben wird?

Mach mal ein var_dump($lang), um zu sehen, ob die richtige Id gesetzt wird.

Dann wäre es interessant zu wissen, was die Variable $strFromAction letztendlich für einen Inhalt hat. Die hoffentlich richtige Sprache sollte dabei in der URL vorkommen.

Gruß
xmurrix
Riffer
Beiträge: 5
Registriert: Di 14. Aug 2007, 11:43
Kontaktdaten:

Beitrag von Riffer »

xmurrix hat geschrieben: Was steht eigentlich in der Variablen $lang für ein Wert drin, wenn die front_crcloginform.inc.php ausgegeben wird?
Danke für den Hinweis! Da steht nämlich tatsächlich der korrekte Wert drin. Das wundert mich etwas, weil ich angenommen habe, dass diese Variable ja irgendwo gesetzt werden muss. Sie wird aber nur als Global deklariert (und damit doch wohl auch initialisiert)? Vermutlich funktioniert das in PHP anders als in den Sprachen, die ich sonst so kenne.
//edit: Ok, habe mich gerade eines besseren belehrt.


So konnte ich meinen Workaround elegant auf die kleine Zeile

Code: Alles auswählen

$strErrorUrl .= "&changelang=" . $lang;
umschreiben.
xmurrix hat geschrieben: Dann wäre es interessant zu wissen, was die Variable $strFromAction letztendlich für einen Inhalt hat. Die hoffentlich richtige Sprache sollte dabei in der URL vorkommen.
Das tut sie auch - nur der Link der beim Login selbst im Browser steht sieht häßlich aus, denn da steht dann

Code: Alles auswählen

http://www.domain.de/cms/front_content.php?idcatart=4711&verweis=815&changelang=2
drin. Der "verweis=815" wird in front_crcloginform.inc.php wieder in den Get-String eingebaut um ihn im Modul Login dazu zu verwenden um auf die eigentlich angestrebte Zielseite (über idart=<Wert aus Verweis>) zu verweisen und wird auch korrekt in die $strFromAction umgesetzt. Ich finde das etwas merkwürdig, daß Contenido das nicht von sich aus korrekt umsetzt. Mag aber an diversen Veränderungen der Seite liegen, die alle nicht von mir sind.
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Riffer hat geschrieben:... nur der Link der beim Login selbst im Browser steht sieht häßlich aus, denn da steht dann

Code: Alles auswählen

http://www.domain.de/cms/front_content.php?idcatart=4711&verweis=815&changelang=2
...
Wenn du eine "schönere" URL willst, sollte es folgendermaßen möglich sein:
Erstelle die URL (für form action) nur mit dem Parameter idcatart, also front_content.php?idcatart=4711.

Die Parameter "verweis" und "changelang" kannst du in das Loginformular als hidden-Felder angeben.

Die URL front_content.php?idcatart=4711 ist dann unter Verwendung der Chain 'Contenido.Frontend.CreateURL' neu zu erstellen.

Code: Alles auswählen

$sFromAction = 'front_content.php?idcatart=4711';
$sFromAction = CEC_Hook::execute('Contenido.Frontend.CreateURL', $sFromAction);
Die neue URL sollte den gewünschten Aufbau enthalten, und beim Versenden des Formulars oben in der Browserzeile stehen.

Es kann sein, dass der Parameter 'verweis' von GET erwartet wird, das müsste dann noch angepasst werden, weil es dann per POST kommt.

Gruß
xmurrix
Riffer
Beiträge: 5
Registriert: Di 14. Aug 2007, 11:43
Kontaktdaten:

Beitrag von Riffer »

Herzlichen Dank!

Die Lösung gefällt mir und ich werde es so abändern.
Sollte kein größeres Problem darstellen.
Gesperrt