Probleme 4.8.9: Errorsite,Weiterleitungen u. Login Errorpage

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

Probleme 4.8.9: Errorsite,Weiterleitungen u. Login Errorpage

Beitrag von xmurrix » So 14. Dez 2008, 18:24

Hallo zusammen,

in der Version 4.8.9 von Contenido gibt es mit dem neu eingeführten URL-Feature Probleme, auf die achiboy aufmerksam gemacht hat (vielen Dank dafür). In diesem Thread möchte ich kurz darauf eingehen und Lösungsvorschläge zum Beheben der Probleme schildern.

Zusammenfassung der Thread von achiboy:
- Problem mit Weiterleitung nach Update auf 4.8.9
- Problem mit error_site nach Update auf 4.8.9
- Problem mit login_error_page nach Update auf 4.8.9


Was ist das URL-Feature?
Ziel von diesem Feature (Klasse Contenido_Url), interne URLs entgegen zu nehmen und diese für die Ausgabe vorzubereiten. Die entgegengenommenen Werte, es handelt sich um eine assoziative Parameterliste (array('idart'=>123, 'idcat'=>32)), werden an einen beliebigen URL-Builder übergeben, der sich dann um die Erstellung der URL kümmert.

Per default ist der URL-Builder Contenido_UrlBuilder_Frontcontent konfiguriert der URLs wie front_content.php?idart=123&idcat=32 erstellt. Das maskierte '&'-Zeichen, das für die Ausgabe von validen XHTML-Seiten nötig ist, wirkt sich bei Weiterleitungen mit der header-Direktive nachteilig aus, dort sollte das &-Zeichen nicht maskiert werden, da manche Clients das nicht richtig interpretieren können.

Im Folgenden ist eine Anleitung zum beheben dieses Problems, das ausschließlich die Contenido Version 4.8.9 betrifft.

/cms/front_content.php:
Zeile 289 von

Code: Alles auswählen

$errsite = 'Location: ' . Contenido_Url::getInstance()->build($aParams));
in

Code: Alles auswählen

$errsite = 'Location: ' . str_replace('&', '&', Contenido_Url::getInstance()->build($aParams);
ändern.

Zeile 949 von

Code: Alles auswählen

            $redirect_url = $oUrl->build($aUrl['params']);
in

Code: Alles auswählen

            $redirect_url = str_replace('&', '&', $oUrl->build($aUrl['params']));
ändern.


/cms/front_crcloginform.inc.php:
In dieser Seite gibt es gleich 2 Probleme, zum einen die Sache mit der Weiterleitung, zum Anderen die Steuerung der eigenen Loginfehler-Seite.

Eine eigene definierte Loginfehlerseite wird nicht mehr angesprochen, man landet immer auf der front_crcloginform.inc.php. Das lässt sich beheben, indem die Zeilen 39 ff von

Code: Alles auswählen

#$err_catart = trim(getEffectiveSetting("login_error_page", "idcatart", ""));
#$err_cat    = trim(getEffectiveSetting("login_error_page", "idcat", ""));
#$err_art    = trim(getEffectiveSetting("login_error_page", "idart", ""));
in

Code: Alles auswählen

$err_catart = trim(getEffectiveSetting("login_error_page", "idcatart", ""));
$err_cat    = trim(getEffectiveSetting("login_error_page", "idcat", ""));
$err_art    = trim(getEffectiveSetting("login_error_page", "idart", ""));
geändert werden.

Dann noch die header-Direktiven folgendermaßen anpassen:
Zeile 69 von

Code: Alles auswählen

    $sErrorUrl = $oUrl->build($aUrl['params']);
in

Code: Alles auswählen

    $sErrorUrl = str_replace('&', '&', $oUrl->build($aUrl['params']));
und Zeile 89 von

Code: Alles auswählen

    $sErrorUrl = $oUrl->build($aUrl['params']);
in

Code: Alles auswählen

    $sErrorUrl = str_replace('&', '&', $oUrl->build($aUrl['params']));
anpassen.


Weiterleitungen zur Homepage:
Ein weiterer Nebeneffekt der verwendeten Url-Builder Klassen ergibt sich in Verbindung mit Weiterleitungen zur Homepage in Artikeleigenschaften. Wird dort eine Weiterleitung nur mit "front_content.php" (ohne Parameter idart, idcat oder idcatart) angegeben, quitiert das Frontend die Ausgabe mit einem Fehler (http://forum.contenido.org/viewtopic.php?t=22975).
Das liegt daran, dass Url-Builder aufgrund der Abwärtskompatibilität mindestens einen Parameter (idcat, idart, oder idcatart) erwarten.

Beheben könnt ihr dies, indem ihr bei Artkelweiterleitungen zur Homepage eines der Parameter mit angibt (front_content.php?idart=123 oder front_content.php?idcat=1 oder front_content.php?idcatart=12) oder die entsprechende Stelle in der front_content.php entschärft in dem ihr die Zeilen 944 ff von

Code: Alles auswählen

            $oUrl = Contenido_Url::getInstance();
            $aUrl = $oUrl->parse($redirect_url);
            if (!isset($aUrl['params']['lang'])) {
                $aUrl['params']['lang'] = $lang;
            }
            $redirect_url = $oUrl->build($aUrl['params']);
            header("Location: $redirect_url");
in

Code: Alles auswählen

#            $oUrl = Contenido_Url::getInstance();
#            $aUrl = $oUrl->parse($redirect_url);
#            if (!isset($aUrl['params']['lang'])) {
#                $aUrl['params']['lang'] = $lang;
#            }
#            $redirect_url = $oUrl->build($aUrl['params']);
            header("Location: $redirect_url");
Gibt es wenige Artikelweiterleitungen zur Homepage, wäre die Angabe eines der benötigen Parameter zu empfehlen, sind es aber viele, hilft wohl das deaktivieren der Zeilen 944 ff in der front_content.php.

Grüße
xmurrix
Zuletzt geändert von xmurrix am So 14. Dez 2008, 18:52, insgesamt 1-mal geändert.

Seelauer
Beiträge: 186
Registriert: So 22. Jan 2006, 21:03
Wohnort: Mal da, mal da
Kontaktdaten:

Beitrag von Seelauer » So 14. Dez 2008, 18:37

Hallo xmurrix,
zunächst möchte ich Dir Danke sagen für die Zeit, welche Du für uns investierst.
Kleiner Nachtrag noch:
In der /cms/front_content.php, Zeile 289 neu fehlt meines Erachtens noch am Ende das schließende ")".
Ansonsten ist dank Deiner Beiträge wieder alles "palletti".
Guten Gruß
Seelauer.

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

Fix Probleme 4.8.9: Errorsite,Redirects u. Login Error Page

Beitrag von xmurrix » Mo 15. Dez 2008, 00:31

Hallo zusammen,

in der Version 4.8.9 gibt es ein paar Probleme mit der neu eingeführten URL-Behandlung, die in diesem Thread beschrieben sind.

Um den Usern das manuelle Nachbessern/Erweitern der betroffenen Stellen zu ersparen, habe ich ein Paket erstellt, in der die betroffenen Sourcen angepasst wurden.

Das Archiv Contenido_4.8.9_ContenidoUrl_fix.zip steht auf meiner Page zur Verfügung und behebt folgende Probleme:
  • Urls mit maskiertem '&'-Zeichen (&) bei Weiterleitungen, z. B. header('Location: front_content.php?idart=1&idcat=2') werden von einigen Clients nicht korrekt interpretiert
  • Url zur Errorpage wird nicht korrekt ausgegeben
  • In den Einstellungen definierte Loginfehler-Seite wird nicht ausgegeben (die betroffenen Zeilen in der front_crcloginform.inc.php waren deaktiviert)
  • Die neue URL-Behandlung unterstützt keine benutzerdefinierten Parameter (akzeptiert wurden nur Parameter idart, idcat und idcatart)
  • Weiterleitungen mit der header-Direktive enthalten nicht immer die vollständige URL (scheme + host)
Der Austausch der Dateien sollte somit die Wartezeit bis zum nächsten Release überbrücken.

Grüße
xmurrix

achiboy
Beiträge: 138
Registriert: Do 26. Aug 2004, 05:05
Kontaktdaten:

Beitrag von achiboy » Mo 15. Dez 2008, 04:45

Ich habe diese Dateien eingespielt.
Nun kommt beim Aufruf der Startseite der Fehler:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'The classfile of Contenido_UrlBuilder couldn't included by Contenido_UrlBuilderFactory: XFrontcontent!' in /home/xyz/public_html/contenido/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php:66 Stack trace: #0 /home/xyz/public_html/contenido/classes/Url/Contenido_Url.class.php(69): Contenido_UrlBuilderFactory::getUrlBuilder('XFrontcontent') #1 /home/xyz/public_html/contenido/classes/Url/Contenido_Url.class.php(80): Contenido_Url->__construct() #2 /home/xyz/public_html/cms/front_content.php(290): Contenido_Url::getInstance() #3 {main} thrown in /home/xyz/public_html/contenido/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php on line 66

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Mo 15. Dez 2008, 10:24

Verschoben nach Installation 4.8.x und gepinnt 8)

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

timo.trautmann_4fb
Beiträge: 472
Registriert: Di 15. Apr 2008, 15:57
Wohnort: Michelstadt
Kontaktdaten:

Beitrag von timo.trautmann_4fb » Mo 15. Dez 2008, 11:17

Vielleicht könnte man dem Aufruf Contenido_Url::getInstance()->build() auch einen zweiten optionalen Parameter mitgeben der die Ausgabe dann statt & einfach nur als & generiert. Würde die Lösung besser finden, da man so nicht an verschiedenen Stellen mit str_replace() arbeiten muss. Was hälst du davon?

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

Beitrag von xmurrix » Mo 15. Dez 2008, 12:22

Hallo,
achiboy hat geschrieben:Ich habe diese Dateien eingespielt.
Nun kommt beim Aufruf der Startseite der Fehler:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'The classfile of Contenido_UrlBuilder couldn't included by Contenido_UrlBuilderFactory: XFrontcontent!' in /home/xyz/public_html/contenido/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php:66 Stack trace: #0 /home/xyz/public_html/contenido/classes/Url/Contenido_Url.class.php(69): Contenido_UrlBuilderFactory::getUrlBuilder('XFrontcontent') #1 /home/xyz/public_html/contenido/classes/Url/Contenido_Url.class.php(80): Contenido_Url->__construct() #2 /home/xyz/public_html/cms/front_content.php(290): Contenido_Url::getInstance() #3 {main} thrown in /home/xyz/public_html/contenido/classes/UrlBuilder/Contenido_UrlBuilderFactory.class.php on line 66
habe eine weitere korrigierte Version der Scripte (inkl. anegpasster Contenido_UrlBuilderFactory.class.php) auf dem Server abgelegt, bitte nochmal downloaden, danach sollte auch das Problem behoben sein.

Gruß
xmurrix

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

Beitrag von xmurrix » Mo 15. Dez 2008, 12:26

timo.trautmann_4fb hat geschrieben:Vielleicht könnte man dem Aufruf Contenido_Url::getInstance()->build() auch einen zweiten optionalen Parameter mitgeben der die Ausgabe dann statt & einfach nur als & generiert. Würde die Lösung besser finden, da man so nicht an verschiedenen Stellen mit str_replace() arbeiten muss. Was hälst du davon?
Die Ersetzungen mit str_replace() sind nicht ideal, das war eine Notlösung auf die Schnelle - Im nächsten Release wird es das str_replace() sicherlich nicht geben.

Gruß
xmurrix

JeromeW
Beiträge: 32
Registriert: Di 11. Nov 2008, 12:52
Kontaktdaten:

Beitrag von JeromeW » Mo 15. Dez 2008, 13:34

Hallo,

ich habe ebenfalls die Dateien eingepielt und bei mir kommt bei Weiterleitung auf front_content.php folgender Fehler:

Fatal error: Uncaught exception 'InvalidArgumentException' with message '$aParams must have at least one of the following values set: $aParams[idcat], $aParams[idart] or $aParams[idcatart]!' in /../contenido/classes/UrlBuilder/Contenido_UrlBuilder_Frontcontent.class.php:88 Stack trace: #0 /../contenido/classes/UrlBuilder/Contenido_UrlBuilder_XFrontcontent.class.php(78): Contenido_UrlBuilder_Frontcontent->buildUrl(Array, true) #1 /../contenido/classes/Url/Contenido_Url.class.php(110): Contenido_UrlBuilder_XFrontcontent->buildUrl(Array, true, Array) #2 /../front_content.php(956): Contenido_Url->build(Array, true) #3 {main} thrown in /../contenido/classes/UrlBuilder/Contenido_UrlBuilder_Frontcontent.class.php on line 88


Grüße
JeromeW

MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount » Mo 15. Dez 2008, 14:12

Tolle Sache. Ich hab die Datei /contenido/classes/UrlBuilder/Sample.php gefunden. Gibt es denn zu den Beispiele auch schon die jeweilige htaccess?

Wo baue ich das wie ein, damit ich einen sprechenden URL bekomme?
Ist das AdvModRewrite jetzt damit vom Tisch?
Oder hat das jetzt den Weg in die 4.8.9 Release gefunden?

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

Beitrag von xmurrix » Mo 15. Dez 2008, 14:13

Hallo JeromeW,
JeromeW hat geschrieben:Hallo,

ich habe ebenfalls die Dateien eingepielt und bei mir kommt bei Weiterleitung auf front_content.php folgender Fehler:

Fatal error: Uncaught exception 'InvalidArgumentException' with message '$aParams must have at least one of the following values set: $aParams[idcat], $aParams[idart] or $aParams[idcatart]!' in /../contenido/classes/UrlBuilder/Contenido_UrlBuilder_Frontcontent.class.php:88...
eine Weiterleitung in Artikeleigenschaften nur mit Angabe der "front_content.php" funktioniert in der aktuellen Version nicht, gebe bitte einfach eine idcat, idart oder idcatart mit an, z. B. "front_content.php?idart=123".

Grund:
Die neu eingeführte URL-Erstellung erwartet mindestens eines der Parameter.

Gruß
xmurrix

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Mo 15. Dez 2008, 14:27

@xmurrix:

Ist es richtig das man die Angabe der Startseite, bei Aufruf ohne Parameter an front_content.php, über eine Mandanteneinstellung vornehmen kann und sind damit nicht Fehlermeldungen wie angesprochen umgangen?
navigation idcat-home [idcat der Startkat]

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Beitrag von xmurrix » Mo 15. Dez 2008, 14:39

Hallo Oldperl,
Oldperl hat geschrieben:@xmurrix:

Ist es richtig das man die Angabe der Startseite, bei Aufruf ohne Parameter an front_content.php, über eine Mandanteneinstellung vornehmen kann und sind damit nicht Fehlermeldungen wie angesprochen umgangen?
navigation idcat-home [idcat der Startkat]

Gruß aus Franken

Ortwin
ja, diese Lösung wäre möglich, wenn als Weiterleitung nur front_content.php angegeben wurde. Die Einstellung ist dann entweder in der front_content.php oder im URL-Builder abzufragen und gegebenenfalls der front_content.php hinzuzufügen.

Gruß
xmurrix

timo.trautmann_4fb
Beiträge: 472
Registriert: Di 15. Apr 2008, 15:57
Wohnort: Michelstadt
Kontaktdaten:

Beitrag von timo.trautmann_4fb » Di 16. Dez 2008, 09:52

Ein Bug:
In deinem Install Package in der Front_Content steht:

Code: Alles auswählen

    die($redirect_url);
Das führt dazu, dass Artikel Weiterleitungen nur Ausgegeben werden und nicht mehr durchgeführt werden.

JeromeW
Beiträge: 32
Registriert: Di 11. Nov 2008, 12:52
Kontaktdaten:

Beitrag von JeromeW » Di 16. Dez 2008, 10:33

@timo.trautmann_4fb:

ok, ich habe die Zeile auskommentiert, jetzt klappt es auch bei mir.

Da viele auf das Problem stossen werden: Wäre da nicht eine neue Contenido Version sinnvoll?

Viele Grüße
JeromeW

Gesperrt