Seite 1 von 1
Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Di 16. Mär 2010, 20:09
von projumper
Hallo @ all,
ich bin gerade ein wenig am verzweifeln.
Für ein Projekt bin ich gezwungen AJAX einzusetzen. Was an sich garnicht so schlimm ist. Das Problem ist nur das ich aus meinem Modul nur ein bestimmtes html Segment benötige. Das Contenido liefert mir aber natürlich alles mit.
Code: Alles auswählen
<html><head>...</head><body>....<div>Der benötigte code</div>
Den "Footer" (....</body></html>) habe ich dur eine die() Funktion weggeschnitten.
Das Problem ist jetzt der "Header".
Das einsetzen von ob_clean oder ob_end_clean brachten kein Erfolg

. Ich habe das Gefühl das Contenido das einfach ignoriert.
Weis jemand einen Rat für mich. Bin für jede Hilfe dankbar.
mfg
projumper
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Di 16. Mär 2010, 22:07
von xmurrix
Hallo projumper,
warum verwendest du nicht ein Template, dass auf ein Layout mit nur diesem einen Modul basiert? Das wäre viel einfacher.
Mit ob_start() usw. würde es auch gehen. dafür müsstest du ganz am Anfang im Template ob_start() aufrufen und am Anfang deines Moduls den Ausgabepuffer einer Variablen zuweisen und leeren, damit bisherige Ausgaben nicht an den Client rausgehen.
Code: Alles auswählen
$code = ob_get_contents();
ob_end_clean();
unset($code);
Danach kannst du im Modul die Ausgabe machen, am Ende des Moduls dann die weitere Ausgabe mit die() beenden. Das ist aber keine gute Lösung, mit einem vorzeitigen die() werden Änderungen an der Session nicht übernommen, könnte als Nebeneffekte geben...
Sieh dir auch mal das Modul "Article_Include" des Beispielmandanten an, damit lassen sich ganze Seiten einbinden. In Verbindung mit einem eigenen Template, das nur dieses Modul enthält und der Ausgabe von <!--start:content--> am Anfang und <!--end:content--> am Ende deines Moduls, dessen Ausgabe du benötigst, kannst du eine Proxyseite erstellen, die dir die Modulausgabe aus der gewünschten Seite extrahiert und ausgibt.
Gruß
xmurrix
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Di 16. Mär 2010, 22:36
von projumper
Hallo,
vielen Dank für die schnelle Antwort. Ich wollte eigentlch nicht extra Modul-Templates oder blind-Layouts dafür basteln.
Zur Zeit habe ich das Problem gelöst in dem ich ein leeres nur mit <container ....> bestücktes Layout gebastelt habe.
In der Version 4.8.8 hat das funktioniert:
Code: Alles auswählen
ob_clean();
echo "<img src=\"".$bigbild."\" style=\"margin-left:".$aBreiteHohe['breite']."px; margin-top:".$aBreiteHohe['hohe']."px;\"/>";
ob_end_flush();
die();
Gibt einen Grund warum das in der 4.8.7 nicht läuft?
mfg
projumper
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Di 16. Mär 2010, 23:31
von xmurrix
In 4.8.8 ist die Ausgabepufferung integriert, der Code der Seite landet per Default immer im Ausgabepuffer und wird nicht sofort an den Client geschickt. Daher kannst du auch in einem Modul mit ob_clean() den Inhalt des Ausgabepuffers leeren, und nur den Modulcode ausgeben.
Gruß
xmurrix
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Mi 17. Mär 2010, 13:44
von projumper
Hallo,
also vermute ich das ein Update mir weiter hilft?!?!
mfg
projumper
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Mi 17. Mär 2010, 17:39
von funomat
Hallo zusammen,
ich hab ein ähnliches Problem mit Contenido und Ajax und da hier die einzige Diskussion läuft, die ich finden konnte, die in etwa in die gleiche Richtung geht, poste ich mein Problem direkt hier und hoffe, dass das ok ist.
Also, ich muss über eine Ajax-Funktion, die ich in einem Layout drin habe, eine Datei aufrufen die unterhalb des Ordners cms liegt. Diese Datei soll zum einen eine Rückgabe an die Ajax-Funktion liefern und zum anderen über die Funktion setProperty('...') Daten zu einem FrontendUser in die DB schreiben. Diese Datei benötigt natürlich einige Contenido-Variablen um zum einen den User zu erkennen und zum anderen um setProperty überhaupt kennen zu können. Jetzt habe ich natürlich das Problem, dass diese Variablen beim Aufruf über die Ajax-Funktion nicht zur Verfügung stehen.
Kann mir jemand sagen, wie ich das Problem lösen kann?
Ich habe auch versucht ein Layout mit nur einem Container zu erstellen und in diesem Container meine Datei als Modul zu integrieren, das Template einem Artikel zuzuweisen und den Artikel von der Ajax-Funktion aufrufen zu lassen. Das hat aber auch nicht funktioniert.
Ob ich es jetzt nun mit einem Artikel oder der extra Datei lösen kann, ist mir eigentlich egal. Hauptsache das Ergebnis stimmt.
Wäre für jeden Wink dankbar.
Gruß,
funomat
PS: Bei mir ist es Contenido 4.8.12 !
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Mi 17. Mär 2010, 21:46
von xmurrix
projumper hat geschrieben:...also vermute ich das ein Update mir weiter hilft?!?!

...
Wenn du Glück hast, reicht es aus, wenn du die cms/front_content.php aus 4.8.4 in dein 4.8.7 übernimmst - natürlich ohne Gewähr.
Solltest du ein Update in Erwägung ziehen, nimm doch gleich die 4.8.12.
Gruß
xmurrix
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Mi 17. Mär 2010, 21:59
von xmurrix
funomat hat geschrieben:...Also, ich muss über eine Ajax-Funktion, die ich in einem Layout drin habe, eine Datei aufrufen die unterhalb des Ordners cms liegt. Diese Datei soll zum einen eine Rückgabe an die Ajax-Funktion liefern und zum anderen über die Funktion setProperty('...') Daten zu einem FrontendUser in die DB schreiben. Diese Datei benötigt natürlich einige Contenido-Variablen um zum einen den User zu erkennen und zum anderen um setProperty überhaupt kennen zu können. Jetzt habe ich natürlich das Problem, dass diese Variablen beim Aufruf über die Ajax-Funktion nicht zur Verfügung stehen....
Hallo funomat,
beim Aufrufen einer Datei außer der front_content.php, fehlen, wie du schon angemerkt hast, einige Contenido Variablen.
Besser ist es, wenn du den Weg über "Layout mit einem Modul -> Template -> Artikel" gehst. Das sollte eigenlich funktionieren. Wenn nicht, kann es daran liegen, dass bei dir z. B. die Sessionid per Get der URL angehängt werden muss - dann muss auch der Ajax-Request die Sessionid beim Absenden des Requests an das Frontent schicken.
Du kannst auch eine andere Datei als die front_content aufrufen. dann musst du sicherstellen, das das Frontend in der Datei korrekt initialisiert wird und die Verarbeitung der Seite richtig abgeschlossen wird (Stichwort page_close()).
Gruß
xmurrix
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Do 18. Mär 2010, 12:10
von funomat
Danke für die, wie immer, schnelle Hilfe. Die Session stand zur Verfügung, die $auth aber leider nicht. Die habe ich jetzt einfach mal mit übergeben und schon läuft es.
Gruß,
Tiago
Re: Contenido 4.8.7, Ajax, ob_clean, Ausgabepuffer löschen
Verfasst: Mo 22. Mär 2010, 00:21
von projumper
Bei mir hat das Update auf die vers. *.12 geholfen ....
vielen Dank!