Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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...

Geschrieben

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?

Geschrieben
... 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");

Geschrieben

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?

Geschrieben

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!

Geschrieben

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.

Geschrieben

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.

Geschrieben

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]

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...