WBCE CMS – Way Better Content Editing.
You are not logged in.
Pages: 1
Hallo,
Ich bin letztens auf das Problem gestoßen, dass das Fraggy Backend Theme bei großen Seiten die Seiten-Übersicht nicht mehr anzeigt und nur eine leere Seite angezeigt wird. Auf der Suche nach der Ursache bin ich auf die Platzhalter die man in Templates platzieren kann gestoßen. Bei sehr großen Seite kann es hierbei passieren, dass diese den gesamten Content löschen, theoretisch könnte der Code das abfangen und einfach das Content Backup laden, dann wären zwar keine Platzhalter im Template aber dafür würde immerhin der Content angezeigt. Allerdings können die Outputfilter nur true zurückgeben und somt wird ein Fehler nie erkannt.
Dieses Problem tritt nur auf, wenn in der Template nicht alle Platzhalter vorhanden sind und deshalb versucht wird diese an sinnvollen Positionen einzufügen.
Um den Fehler zu reproduzieren empfehle ich das Fraggy Backend Theme v2.6.1 zu installieren und eine große Anzahl an Seiten zu erstellen (Mir ist der Fehler bei 380 Seiten aufgefallen) und dann auf die Seiten-Übersicht zu gehen.
Der Content wird in der Funktion wbce->framework->Insert.php->Insert->addPlaceHoldersToDom Zeile 936 gelöscht, da die preg_replace Funktion bei sehr großem Content einfach null zurück gibt, anstatt entweder den Content unverändet oder mit eingfügten Platzhaltern zurückzugeben. Das könnte theoretisch erkannt werden, hierfür müsste die Funktion wbce->modules->mod_opf_<Filter Name>->filter.php->opff_mod_opf_<Filter Name> in der Lage sein nicht nur true zurückzugeben. In dem Fall hätte dann wbce->modules->outpufilter_dashboard->functions.php->opf_apply_filters Zeile 1260 auch die Möglichkeit den Fehler zu erkennen und einfach das Content Backup zu laden.
Eine andere Lösung ist vorrauszusetzen das alle Templates alle Platzhalter oder den <!--(NO PH)--!> Text enthalten, falls keine Platzhalter verwendet werden sollen.
Das Github Issue dazu: github.com/WBCE/WBCE_CMS/issues/506.
Offline
stefanek
Danke für Deinen Report und Verbesserungsvorschlag inkl. PullRequest.
Ich habe momentan nicht die Zeit es nachzustellen, daher einige Fragen:
Der Content wird in der Funktion wbce->framework->Insert.php->Insert->addPlaceHoldersToDom Zeile 936 gelöscht, da die preg_replace Funktion bei sehr großem Content einfach null zurück gibt, anstatt entweder den Content unverändet oder mit eingfügten Platzhaltern zurückzugeben.
Ist es generell so, dass die preg_replace Funktion bei zu viel Inhalt aussteigt?
Falls ja, dann ist Dein fix/patch sehr gut:
https://github.com/WBCE/WBCE_CMS/pull/5 … c794f605c8
Sollte sich aber nochmal von Martin/mrbaseman angeschaut werden, da er sich um das OPF Modul kümmert.
Schönen Gruß,
Christian
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Ist es generell so, dass die preg_replace Funktion bei zu viel Inhalt aussteigt?
Soweit ich das sehen konnte, ja. Zumindest ist das meine einzige Erklärung warum diese null zurückgibt, was laut PHP Dokumentation nur bei einem Fehler auftritt. Mir ist das aufgefallen als ich versucht habe das ganze mit einem Online Regex Debugger zu probieren und dieser mir den Error "catastrophic backtracking" gegeben hat.
Es wäre vielleicht auch eine Idee einen solchen Error mit preg_last_error() abzufangen und im Errorlog zu vermerken.
Offline
ich habe den Pull Request gemerged. Auf die Schnelle habe ich keine Möglichkeit gefunden preg_last_error() zurückzusetzen, sprich: wenn da was drin steht, dann weiß man nicht so genau, ob das von dem aktuellen Filteraufruf überhaupt kommt. Es ist zwar recht wahrscheinlich, aber man könnte sich auch Filter vorstellen, die mit str_replace arbeiten.
Aber ich hab noch eine Notice in den vorgeschlagenen Fix mit eingebaut, damit man auf das Fehlschlagen des Filters aufmerksam gemacht wird.
Offline
florian, colinax
Pages: 1