forTeesSake Geschrieben 30. November 2006 Geschrieben 30. November 2006 Hi und hallo, ich müsste Den Inhalt einer PHP-Include Datei in eine Variable packen. Der Witz dabei ist, dass der Inhalt der Datei aber zuerst "ausgeführt", also durch den PHP Parser gelaufen sein muss und nur der erzeugte HTML-Text in der Variablen gespeichert wird. in etwa so: function returnIncludeInhalt(){ $retVal = [EXECUTE??][include("inc/meinInclude.inc.php")]; } Nehmen wir an in der Include Datei steht nur <?php echo("OK"); ?> Dann soll $retVal einfach nur "OK" enthalten. Geht das? Ich komm im Moment nicht drauf... Zitieren
Jaraz Geschrieben 30. November 2006 Geschrieben 30. November 2006 Hi, versuchs mal mit fopen. PHP: fopen - Manual Gruß Jaraz Zitieren
forTeesSake Geschrieben 30. November 2006 Autor Geschrieben 30. November 2006 Ja, das hatte ich anfangs auch. Aber ich finde keine Einstellung mit der der Inhalt der Datei noch geparst wird. Ich möchte ja nicht den reinen text der Datei, sondern den durch den PHP Parser gelaufenen. Oder überseh ich was? Zitieren
geloescht_JesterDay Geschrieben 30. November 2006 Geschrieben 30. November 2006 ... sondern den durch den PHP Parser gelaufenen. Oder überseh ich was? Dann ruf die Datei nicht aus dem Dateisystem auf, sondern über den Server. Also $file = file_get_contents('http://localhost/include.php'); [/php] Dazu muss allerdings allow_url_fopen aktiviert sein in der ini. PHP: file_get_contents - Manual EDIT: oder du kannst es über cli aufrufen, wenn das geht, also [php] $file = system("php /path/to/file.php"); Zitieren
forTeesSake Geschrieben 30. November 2006 Autor Geschrieben 30. November 2006 Ui! Cool! Das geht. Aber jetzt wirds kompliziert. In meiner Include Datei greife ich auf globale Funktionen zu. Normalerweise funktioniert das, da mein Aufbau folgender ist: HAUPTDATEI ->includiert globale funktionen ->includiert kontaktFormular (greift auf globale funktionen zu) Wenn ich das nun via file_get_contents('http://localhost/includes/kontaktform.php'); mache, erzeugt das den Fehler, dass dem kontaktform.php Include die globalen Funtionen fehlen (ist ja klar). Kann ich da noch was tun? Oder muss ich meine Idee begraben? Zitieren
forTeesSake Geschrieben 30. November 2006 Autor Geschrieben 30. November 2006 Ok Problem gelöst. Ich werde einfach in jede meiner Template Dateien einen check auf eine vorhanden globala Variable einbauen. Und wenn dieser Check fehl schlägt, dann includiere ich einfach meine globalen Funktionen. Vielen Dank! Zitieren
etreu Geschrieben 1. Dezember 2006 Geschrieben 1. Dezember 2006 Du kannst ja auch gleich anstelle von include() include_once() benutzen. Das nimmt die notwendigen Überprüfugen schon vor. Das gleiche gibt es auch mit require(). Nur so als Info für das nächste Mal. Zitieren
forTeesSake Geschrieben 7. Dezember 2006 Autor Geschrieben 7. Dezember 2006 Hmm hab noch weiter gemacht, aber komme nicht zum gewünschten Ergebnis. Hier mal ein Codefragment class pageContent{ var $content; //THE PAGE CONTENT var $templateC; //CONTENT TEMPLATE var $retVal = ""; function pageContent($contentFile){ $this->content = returnFileContent($contentFile); $pattern = "/<CT:([0-9A-Za-z_]*)>.*/s"; $this->templateC = preg_replace($pattern, "$1", $this->content); if(substr($this->templateC, 0, 3) == "ST_"){ $this->retVal.= "<div>"; $this->retVal.= file_get_contents("http://localhost/".strtolower("inc/templates/".$this->templateC).".inc.php"); $this->retVal.= "</div>"; }else{ $this->getLayoutAndOutputContent(); } } [/PHP] Was passiert: Ich erstelle beim Aufruf meiner Seite aus der pageContent Klasse ein Object. Dieses Objekt bekommt, wie auch immer, ein contentFile übergeben. In diesem Contentfile steht zuerst einmal das Template für den Content, und natürlich sein Content z.b. [code] <CT:1SPALTEN> ### SPALTE1 ### My content here spalte 1 <h1>und mal ne Headline</h1> ja, das ist ganz schlank und für manche ansprüche genügend ### SPALTE1 ### . . [/code] In diesem Fall ein 1 spaltiges Layout und sein Content Es soll aber auch Seiten geben, die von mir Vorgefertigte Module einbinden. Z.b. Habe ich ein komplettes Kontaktformular mit Validierung und E-Mail Versand etc. Dazu ist die if-Abfrage if(substr($this->templateC, 0, 3) == "ST_"){ in der pageContent Funktion. Wenn also ein spezielles Template gewünscht wird, soll dieses eingebunden werden. Im Moment arbeite ich mit einer Variable "retVal" die dann per file_get_content das gerenderte Template als Inhalt bekommt. Leider leider kennt die Datei dann aber weder meine globalen Stylesheets, noch Javascripte etc. Is ja klar, da in der Include Datei diese Angaben gar nicht drinstehen. Ich kann an dieser stelle aber auch nicht mit include include_once oder require arbeiten, da ich mir der Inhalt meiner kompletten Seite ja zuerst nach und nach zusammenbaue. z.b. wird nach dem PageContent noch die Seitennavigation zusammengebaut und erst wenn alles fertig ist, Erfolg über andere Funktionen und KLassen die Ausgabe meiner kompletten Seite. Wenn ich an dieser Stelle includieren würde, würde der Content somit an der falschen Stelle erscheinen. Wie schaffe ich es also, dass meine "include-Datei" (ist sie ja hier nicht) auch meine Globalen Stylesheets Javascripts und php Funktionen kennt? Vielen Dank für jeden der da nen Tipp hat. Zitieren
geloescht_JesterDay Geschrieben 7. Dezember 2006 Geschrieben 7. Dezember 2006 Wie schaffe ich es also, dass meine "include-Datei" (ist sie ja hier nicht) auch meine Globalen Stylesheets Javascripts und php Funktionen kennt? Auch wenn ich den kompletten Sinn nicht ganz verstehe (oder wenn das eine Art CMS sein soll das mächtig kompliziert finde): Stylesheets und Javascripts kennt deine Include-Datei gar nicht. Weil sie nur auf der Serverseite eine Include-Datei ist und die genannten Dinge erst auf der Clientseite eine Rolle spielen. Zu den php-Funktionen: include zusammen mit OutputBuffering EDIT: Oder besser: Include, aber deine Module so aufbauen, dass die Ausgabe nicht per Echo o.ä. erfolgt, sondern die Ausgabe in einen String geschieht, der dann abgefragt werden kann von der Hauptfunktion. Beispielhaft: $this->retVal.= "<div>"; include($modulName.".inc.php"); $this->mod = new "T".$modulName; $this->retVal.= $this->mod->getOutput; $this->retVal.= "</div>"; [/php] Zitieren
forTeesSake Geschrieben 7. Dezember 2006 Autor Geschrieben 7. Dezember 2006 Au ja! Das ist ne gute Idee und ich werd´s so machen. Ja, das soll eine Art CMS sein. Im Endeffekt aber nur für mich selbst. Wir haben sehr viele Kundenseiten, die ganz einfach gestrickt sind. Und bevor ich da ein überladenes CMS nehme, hab ich mir was ganz kleines und einfaches geschrieben. Eine XML-Datei, die die Navigation beinhaltet. Und für jede Seite eine einfache Datei, die in der ersten Zeile ihr Template und dann den Content als ganz einfachen Plaintext mit ein paar Möglichkeiten der Auszeichnug enthält. Ich finds ganz smart... Noch Vielen Dank Zitieren
kills Geschrieben 8. Dezember 2006 Geschrieben 8. Dezember 2006 Hi, ich würde es so machen: <?php $file = 'abc.php' ob_start(); include($file); $content = ob_get_contents(); ob_end_clean(); ?> [/PHP] Eine Alternative würdest du evtl noch mit PHP: eval - Manual hinbekommen. Gruß, Markus Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.