Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Eigenes Plugin - Fehler. Cannot modify header information...

Begonnen von polhem, 04. November 2011, 12:27:58

« vorheriges - nächstes »

polhem

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&ouml;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."&nbsp;&nbsp;&nbsp;";
             
$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

hausl78

#1
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

polhem

#2
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