Hallo an alle,
hab mich gerade an die Programmierung eines eigenen Plugins gewagt. Es soll der Inhalt einer XML-Datei ausgegeben werden. Die Einbindung hat geklappt, trotzdem ist das Ergebnis nicht ganz das, was ich mir vorgestellt habe.
Der XML-Inhalt wird zwar ausgegeben, jedoch entweder vor dem Header (was zur Fehlermeldung und zerschossenem Layout führt) oder aber nicht vollständig. Hier mein verkürzter Code (vollständig angehängt zum Ausprobieren):
<?php class XMLausgeben extends Plugin { function getContent($value) { $values = explode(",", $value); return liesXML(); } // function getContent() function getConfig() {/*...*/} function getInfo() {/*...*/} } // class XMLausgeben/********************************************************************** Hilfsfunktionen**********************************************************************/ function liesXML() { if (file_exists("plugins/XMLausgeben/file.xml")) { $xml_file = simplexml_load_file("plugins/XMLausgeben/file.xml"); } else { echo "Datei konnte nicht geöffnet werden.<br />"; }; foreach ($xml_file->Datensatz as $aktDS) {// echo bringt die Fehlermeldung echo fct_einzelDS($aktDS);// return bringt nur einen Datensatz, den aber richtig// return fct_einzelDS($aktDS); }; } // function liesXML() function fct_einzelDS($aktDS) { $zeigeDS = $aktDS->Zeile."<br />"; $zeigeDS .= $aktDS->Feld1." "; $zeigeDS .= $aktDS->Feld2."<br /><hr />"; return $zeigeDS; } // fct_einzelArtikel()?>
Die Funktion liesXML() öffnet eine XML-Datei und übergibt diese stückweise an fct_einzelDS(). Das Ergebnis von fct_einzelDS() sollte eigentlich mit echo oder print ausgegeben werden. Das führt aber zu dem Fehler. Ersetzt man echo mit return, dann stimmt zwar das Layout, aber die foreach-Schleife wird logischerweise nach dem ersten Durchlauf abgebrochen. Das Verhalten tritt sowohl lokal (XAMPP) als auch online auf.
Woran kann das liegen und kann ich da was machen?
Polhem
Hallo!
Das ist richig, return beendet die Funktion und liefert das Ergebnis zurück. Und mit echo in der Schleife ausgeben funktioniert auch nicht / schon gar nicht, denn wenn dieser Code ausgeführt wird gibts quasi noch keine Seite und dann rummst es...
Der Zusammenbau "muss" in der Schleife erfolgen und gepuffert werden und am Ende dann gesamt zurückgegeben werden, ich hab das im Anhang mal so grundsätzlich gemacht. Und sofern du die Methode fct_einzelDS sonst nicht nochmals wo brauch *könntest* die auch gleich in die Hauptschleife von liesXML() reinnehmen, aber das ist auch Geschmackssache.
Schau in der index.zip im Anhang
Übrigens:
Ich hab die Hilfsunktionen auch in die Class gegeben, denn die gehört ja auch irgendwie dazu ;) Zugreifen tut man dann mittels $this->fct_einzelDS($aktDS)
Deine Datei (zumindest die im ZIP) ist nicht als UTF-8 gespeichert, das kann ev. Probleme verursachen.
LG
Jürgen
Hallo Jürgen,
danke Dir für die Antwort und den korrigierten Code! (Sorry, ich guck selten ins Forum)
Inzwischen hatte ich mir schon überlegt, dass echo... innerhalb einer Funktion wohl doch nicht so der feine Stil ist. Und mit return klappts ja.
ZitatÜbrigens:
Ich hab die Hilfsunktionen auch in die Class gegeben, denn die gehört ja auch irgendwie dazu
Das hatte ich auch schon probiert, aber den Zugriff auf die Hilfsfunktionen hab ich nicht hingekriegt. Und so ist es jetzt richtig rund. Danke!
Polhem