30. November 200619 j 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...
30. November 200619 j 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?
30. November 200619 j ... 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");
30. November 200619 j 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?
30. November 200619 j 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!
1. Dezember 200619 j 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.
7. Dezember 200619 j 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.
7. Dezember 200619 j 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]
7. Dezember 200619 j 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
8. Dezember 200619 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.