Plugin Advanced Mod Rewrite für Contenido 4.8.x

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

Re: PHP Fatal Error beim speichern von Kategorien

Beitrag von xmurrix » Do 6. Dez 2012, 13:20

Hallo CinKon,
CinKon hat geschrieben:...in der Hauptnavigtion steht als URL aber immer nur http://www.domain.de/de/...
Hast du schon alle Aliase zurückgesetzt oder zumindest alle Aliase (Kategoien und Artikel) neu gesetzt?
CinKon hat geschrieben:...wenn ich allerdings in der englischen Sprachsynchronisation die Kategorien der 1. Ebene neu speichern will, erhalte ich immer nur folgenden Fehler:
[06-Dec-2012 10:16:41 UTC] PHP Fatal error: Call to a member function get() on a non-object in/ xxx/contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php on line 122
...
Aus der ersten Blick sieht es so aus, als ob die Kategoriestruktur nicht konsistent ist. Die functions.mod_rewrite.php Zeile 122 gehört zu mr_strRenameCategory(), die ist zuständig zum Anpassen des Kategoriealias, inkl. aller Unterkategorien. Entweder steht in der Datenbank drin, dass hier eine Unterkategorie vorhanden ist und die gibt es aber nicht, oder der fehler ist in der Funktion mr_strRenameCategory()...

Kannst du bitte mit etwas debuggen das Problem genauer eingrenzen?

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

CinKon
Beiträge: 129
Registriert: Do 9. Okt 2008, 09:13
Wohnort: Leipzig
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von CinKon » Do 6. Dez 2012, 13:27

Hi xmurrix,

die Aliase habe ich schon mehrfach zurückgesetzt, leider ohne erfolg.

Das Problem mit dem Fatal Error tritt auch nur bei Kategorien mit Unterkategorien auf. Nehme ich eine Änderung an der Aliase vor, wird diese auch umbenannt, aber es tritt eben der PHP-Error auf...

Ausserdem tritt der Fatal Error es auch nur in anderen Sprachen auf, nicht in Deutsch. Also Quasi in der Ursprungssprache ist alles in Ordnung, nur in Sprachen die synchronisiert wurden, kommt es zu Problemen. Wirkt sich jedoch im Frontend auch auf die deutsche Sprache aus.
"Marty, du musst VIERDIMENSIONAL denken!" - Doc Brown

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Do 6. Dez 2012, 13:38

CinKon hat geschrieben:..Das Problem mit dem Fatal Error tritt auch nur bei Kategorien mit Unterkategorien auf. Nehme ich eine Änderung an der Aliase vor, wird diese auch umbenannt, aber es tritt eben der PHP-Error auf...

Ausserdem tritt der Fatal Error es auch nur in anderen Sprachen auf, nicht in Deutsch. Also Quasi in der Ursprungssprache ist alles in Ordnung, nur in Sprachen die synchronisiert wurden, kommt es zu Problemen. Wirkt sich jedoch im Frontend auch auf die deutsche Sprache aus...
Danke schon mal für das Feedback.

Nehmen wir z. B. an, dass du die Kategorie 123 umbenennen willst. In der Tabelle con_cat stehen dann Einträge, die als parentid den Wert 123 haben. Nun, die Funktion mr_strRenameCategory() holt alle Kategorien aus der Tabelle con_cat mit parentid=123 und erwartet in der Tabelle con_cat_lang genau diese Kategorien, die sind anscheinend nicht in der anderen Sprache drin...

Ok, ersetze bitte die Funktion gegen folghende Version:

Code: Alles auswählen

function mr_strRenameCategory(array $data){
    Contenido_mpDebug::getInstance()->log($data, 'mr_strRenameCategory $data');

	// hes 20100102
    // maximal 50 recursion level
    $recursion = (is_int($data['recursion'])) ? $data['recursion'] : 1;
	if ($recursion > 50) {
		exit("#20100201-1503: sorry - maximum function nesting level of ".$recursion." reached");
	}

    $mrCatAlias = (trim($data['newcategoryalias']) !== '') ? trim($data['newcategoryalias']) : trim($data['newcategoryname']);
    if ($mrCatAlias != '') {
        // set new urlname - because original set urlname isn''t validated for double entries in same parent category
        ModRewrite::setCatWebsafeName($mrCatAlias, $data['idcat'], $data['lang']);
        ModRewrite::setCatUrlPath($data['idcat'], $data['lang']);
    }

	// hes 20100102
    // now dive into all existing subcategories and modify their paths too...
    $str = 'parentid=' . $data['idcat'];
    $oCatColl = new cApiCategoryCollection($str);
    
    while ($oCat = $oCatColl->next()) {
	    
		// hes 20100102
	    $str = 'idcat=' . $oCat->get('idcat') . ' AND idlang=' . (int)$data['lang'];
	    $oCatLanColl = new cApiCategoryLanguageCollection($str);
	    if ($oCatLan = $oCatLanColl->next()) {
            // hes 20100102
            $childData = array(
                'idcat'            => $oCat->get('idcat'),
                'lang'             => (int)$data['lang'],
                'newcategoryname'  => $oCatLan->get('name'), 
                'newcategoryalias' => $oCatLan->get('urlname'),
                'recursion'        => $recursion + 1
            );
            
            $resData = mr_strRenameCategory($childData);
        }
    }

    return $data;
}
Damit sollte der Fehler nicht mehr auftauchen.

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

CinKon
Beiträge: 129
Registriert: Do 9. Okt 2008, 09:13
Wohnort: Leipzig
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von CinKon » Do 6. Dez 2012, 14:00

Danke! Das hat nun den Fatal Error beseitigt. Leider aber noch nicht das Ursprungsproblem ^^ (also dass in der Hauptnavigation nur domain.de/de/ erscheint)

Muss ich nun jede Kategorie in jeder Sprache neu speichern? Und auch jeden Artikel? Oder kann man das automatisieren... :-/ Jetzt habe ich ja nun garkeine Fehlermeldung mehr, die mich darauf hinweisen kann, warum die URL's in der Navi nicht ausgegeben werden... :-/
"Marty, du musst VIERDIMENSIONAL denken!" - Doc Brown

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Do 6. Dez 2012, 14:19

CinKon hat geschrieben:..Leider aber noch nicht das Ursprungsproblem ^^ (also dass in der Hauptnavigation nur domain.de/de/ erscheint)

Muss ich nun jede Kategorie in jeder Sprache neu speichern? Und auch jeden Artikel? Oder kann man das automatisieren... :-/ Jetzt habe ich ja nun garkeine Fehlermeldung mehr, die mich darauf hinweisen kann, warum die URL's in der Navi nicht ausgegeben werden... :-/
Aktiviere das Debugging in "contenido/plugins/mod_rewrite/includes\config.plugin.php" (Zeile 69 - 76) mit

Code: Alles auswählen

// set debug configuration
$options = array(
    'enable'                    => true, // disable debug
    'ressource_urls'            => array('/contenido/logs/errorlog.txt'),
    'dump_super_globals'        => array('$_GET', '$_POST', '$_COOKIE', '$_SESSION'),
    'ignore_empty_superglobals' => true
);
um zu sehen, was da passiert.

Außerdem sollte CONTENIDO nicht mit der Konfiguration $cfg["is_start_compatible"] = true; laufen, das Plugin unterstützt das nicht. Fallas das bei dir der Fall ist, gibt es unter http://forum.contenido.org/viewtopic.php?f=66&t=21578 eine Beschreibung dazu (ziemlich am Ende).

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

CinKon
Beiträge: 129
Registriert: Do 9. Okt 2008, 09:13
Wohnort: Leipzig
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von CinKon » Do 6. Dez 2012, 15:41

Schau mal bitte in deine PN's :-)
"Marty, du musst VIERDIMENSIONAL denken!" - Doc Brown

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Fr 7. Dez 2012, 15:51

CinKon hat geschrieben:Danke! Das hat nun den Fatal Error beseitigt. Leider aber noch nicht das Ursprungsproblem ^^ (also dass in der Hauptnavigation nur domain.de/de/ erscheint)

Muss ich nun jede Kategorie in jeder Sprache neu speichern? Und auch jeden Artikel? Oder kann man das automatisieren... :-/ Jetzt habe ich ja nun garkeine Fehlermeldung mehr, die mich darauf hinweisen kann, warum die URL's in der Navi nicht ausgegeben werden... :-/
Als Info für andere CONTENIDO User:
Das Problem war wieder mal die CONTENIDO-Einstellung

Code: Alles auswählen

$cfg["is_start_compatible"] = true;
Es kommt immer wieder vor, dass manche von einer älteren CONTENIDO-Installation auf eine neue Version aktualisieren, das Plugin ist aber nicht damit kompatibel. Anscheinend sind die Hinweise in der Readme des Plugins und im Beitrag Plugin Advanced Mod Rewrite für Contenido 4.8.x nicht ausreichend gewesen. Um das zu entschärfen, also das Leben der User zu erleichern, gibt es den Beitrag is_start_compatible auf neue Version umstellen dazu. Das Plugin wird in der nächsten Version eine Prüfung dieser Einstellung haben und den User im Backend darauf hinweisen...

Grüße
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

masch
Beiträge: 104
Registriert: Do 8. Jan 2009, 10:29
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von masch » Sa 19. Jan 2013, 02:13

Hallo,

mal noch ne Frage zum umschreiben.
Deine Anleitungen um angehängte level usw zu entfernen, funzen prima. aber ich habe gerade eben erst gesehen das die error site noch ?error=1 anhängt.
wo versteckt sich die errorseite zum abändern?
gibts vielleicht auch n Lösungsansatz fürs vpGuestbook? ab Seite 2 bei der Anzeige der GB Einträge wird ebenfalls angehängt ?start=5

mfg und vielen Dank

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Sa 19. Jan 2013, 13:01

Hallo masch,

während manche Parameter, die in diversen Modulen angehängt werden, nicht wirklich gebraucht werden, ist es mit error=1 oder start=5 etwas anders. Diese Parameter werden gebraucht und sollten nicht unbedingt entfernt werden.

Das AMR-Plugin erstellt nur Clean-URLs zu Kategorien/Artikeln, unterstützt aber nicht das Integrieren von Parametern in die generierte URL.

Es ist vollkommen in Ordnung, wenn nur die Clean-URLs zu Kategorien/Artikeln generiert werden, und jegliche weitere Dynamik kann ruhig mit Query-Parametern übergeben werden. Das ist vollkommen legitim und die übliche Vorgehensweise.

Willst du aber auch das anpassen, dann kannst du folgendermaßen vorgehen:
  • Ändere die Logik in der Funktion _buildUrl() in der Klasse Contenido_UrlBuilder_MR (siehe contenido/classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php). Diese Funktion bekommt alle Query-Parameter und generiert daraus die Clean-URL.
  • Ändere die Logik in der Funktion execute() in der Klasse ModRewriteController (siehe contenido/plugins/mod_rewrite/classes/class.modrewritecontroller.php). Die Klasse bekommt die Servervariable REQUEST_URI ($_SERVER['REQUEST_URI']) und die Funktion ermittelt daraus je nach Einstellung Sprache, Mandant, Kategorie und/oder Artikel.
Ich würde es dir aber nicht empfehlen, denn du musst dir ein Format überlegen, wie du solche Parameter in die URL einbaust und sie wieder auslesen kannst. Viel schöner wird die URL dann auch nicht ausssehen.

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

masch
Beiträge: 104
Registriert: Do 8. Jan 2009, 10:29
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von masch » Sa 19. Jan 2013, 13:22

hallo murrix,

herzlichen Dank für Deine Erläuterungen. habe die errorcodes mit der .htaccess abgefangen.
401, 403 und 404 wären vielleicht eine Option mit einzubauen in kommenden Versionen?
Wobei 404 wirklich wichtig zu sein scheint. aber wäre wohl eher ein f4b Job, die Fehlerseiten zu integrieren.

wünsch Dir n stressfreies Wochenende

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Sa 19. Jan 2013, 13:38

...wünsch Dir n stressfreies Wochenende...
Danke, gleichfalls.

Bedenke aber, dass der Parameter error=1 für die Fehlerseite verwendet wird. Wenn eine Seite nicht existiert, wird auf die Fehlerseite umgeleitet. Sollte aber die Fehlerseite nicht existieren, würde dies nochmal in einer Weiterleitung enden. Mit error=1, wird dies abgefangen.

Der HTTP-Statuscode 404 ist seit der 4.8.17 drin. Bei einer nicht gefundenen Seite, gibt CONTENIDO den Header mit 404 aus, ob die anderen noch reinkommen, sollte geprüft werden.

Gruß
xmurrix
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

masch
Beiträge: 104
Registriert: Do 8. Jan 2009, 10:29
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von masch » Sa 19. Jan 2013, 14:33

hm, ist das standardmässig aktiviert?
Contenido 4.8.18 mit AMR mit aktivierter Fehlerseite.
ohne dieses kleine Häkchen im AMr leitet CMS auf Startseite um, mit auf Fehlerseite. Wie beschrieben.
falsche html seite aufgerufen gibt für die Seite aus: 302 Found. dann Umleitung auf Fehlerseite mit HTTP/1.0 404 Not found

um eine niegelnagelneue Webseite innerhalb von 5 Wochen von 0 auf Seite 1 bei Google zu erhalten bei 7,6 Millionen Suchergebnissen, sind solche Dinge auch zu lösen.

Allerdings sehe ich irgendwie keinen meta Eintrag für 404 auf der Contenido Fehlerseite. Bei mir scheint 404 Header von der htaccess zu kommen...

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Sa 19. Jan 2013, 16:56

masch hat geschrieben:...ist das standardmässig aktiviert?...
Was meinst du damit, die Ausgabe der 404? Falls ja, dann wird dies immer von CONTENIDO ausgegeben, wenn die angefragte Seite nicht gefunden wird.
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

McHubi
Beiträge: 1122
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von McHubi » Mi 23. Jan 2013, 21:48

Hallo Murat,

ich hoffe, ich habe bei meiner Suche nach einer schon vorhandenen Lösung zu folgendem Problem keine Antwort übersehen:

Der aktuelle Aufbau der URL sieht im Moment so aus:
www.domain.de/startseite.html
http://www.domain.de/kategorie/unterkat ... lname.html


Beim Aufruf der Startseite soll jetzt "startseite.html" wegfallen und nur http://www.domain.de in der Adresszeile stehen. Ich kann natürlich im Plugin die entsprechende Checkbox für die Anzeige des Artikelnamens deaktivieren, dann fällt der aber natürlich nicht nur auf der Startseite weg sondern überall.

Bin Dir für einen Tipp dankbar! :D

Viele Grüße,

Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

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

Re: Plugin Advanced Mod Rewrite für Contenido 4.8.x

Beitrag von xmurrix » Mi 23. Jan 2013, 23:03

Hallo Markus,

das Plugin hat keine Option um für bestimmte Artikel/Kategorien unterschiedliche URLs zu generieren. Du kannst das aber mit folgenden Möglichkeiten lösen.

Modul
Am Einfachsten ist es, wenn du im Modul die URL "/" für den Artikel oder für die Kategorie ausgibst. Dabei umgehst du die URL-Generierung.

Chain
Alternativ kannst du eine Chainfunktion registrieren, um eine vom UrlBuilder generierte URL nachträglich noch anzupassen. Dafür gibt es die Chain 'Contenido.Frontend.PostprocessUrlBuilding' und eine Funktion, die der Chain registriert wird, bekommt die generierte URL, die noch angepasst werden kann.
Hier ein Beispiel im Forum:
http://forum.contenido.org/viewtopic.ph ... 43#p147943

Beide Lösungen sind nicht sehr elegant, d. h. man könnte da also noch weitere Features einbauen...

Gruß
Murat
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

Gesperrt