content skript + str_replace
Andy5590
- php
Hi,
ich bin gerade dabei eine Webseite zu entwickeln.
Ich habe eine HTML-Datei in welcher im content-div der String "{content}" steht.
Diesen String möchte ich gerne durch mein content-script ersetzten.
Also das Ersetzten:
$main['content'] = include('core/content.php');
$main['template'] = 'templates/standard/index.html'
$template = file_get_contents($main['template']);
str_replace('{content}',$main['content'],$template);
Meine content.php:
if(isset($_GET['mod']) AND isset($mods[$_GET['mod']])){
include($mods[$_GET['mod']]);
} else {
include(mods/home.php);
}
Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
also "{content}" durch eine "1" ersetzt wird.
Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.
Kann mir da jemand weiterhelfen?
thx,
Andy
Hi,
Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
also "{content}" durch eine "1" ersetzt wird.
das ist die Rückgabe Deines include().
Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.
Nämlich exakt dort, wo Du die Datei inkludierst.
Kann mir da jemand weiterhelfen?
Wenn Du kein include() verwenden möchtest, dann verwende keines. Wie man Dateien einliest, scheinst Du zu wissen.
Cheatah
das ist die Rückgabe Deines include().
Die Rückgabe meines includes als String ist "1"?
Nämlich exakt dort, wo Du die Datei inkludierst.
Ich inkludiere die Datei aber in mein content-div (da wo die 1 steht), deswegen versteh ich das nicht ganz.
Wenn Du kein include() verwenden möchtest, dann verwende keines. Wie man Dateien einliest, scheinst Du zu wissen.
Wie kann ich es ohne include() lösen?
Bin noch Anfänger.
Thx,
Andy
Grüße,
Wie kann ich es ohne include() lösen?
http://de.php.net/manual/en/function.file-get-contents.php
SO
MFG
bleicher
$main['content'] = file_get_contents('core/content.php');
anstatt
$main['content'] = include('core/content.php'); ??
andy
Hat sonst noch jemand ne Idee?
Hello,
Hat sonst noch jemand ne Idee?
Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.
dann brauchst Du nur noch zwei Häkchen spendieren und ein paar spitze Klammern usw...
$main['content'] = '<?php include('core/content.php'); ?>';
$main['template'] = 'templates/standard/index.html'
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.
ja dass ich aus einer HTML-Datei eine php-Datei machen kann und das dann so löse ist klar, nur wollt ich das vermeiden.
Ich will ja, dass in meiner HTML-Datei {content} steht, und das dann bewirkt, dass die content.php hier reingeladen wird.
So wie das in den meisten Content Management Sytemen der Fall ist.
thx,
andy
Hello,
Ich will ja, dass in meiner HTML-Datei {content} steht, und das dann bewirkt, dass die content.php hier reingeladen wird.
So wie das in den meisten Content Management Sytemen der Fall ist.
Dann brauchst Du also eine Funktion, die zwar wie include() die eingebundene Datei parst, aber das Ergebnis nicht in die Datei schreibt, sondern in eine Variable
function get_parsed($file)
{
ob_start();
include ($file);
return ob_get_clean();
}
Das Parsen findet zum Laufzeitpunkt der Funktion statt.
$main['content'] = get_parsed('core/content.php');
$main['template'] = 'templates/standard/index.html'
$template = file_get_contents($main['template']);
str_replace('{content}',$main['content'],$template);
Probier mal aus, ob das funktioniert.
Das Problem wird nur sein, dass der Eingebundene File keine Redeclares enthalten darf, also keine Funktionsdefinitionen von Funktionen, die schon vorhanden sind im Script oder von Konstanten, die schon vorhanden sind im Script. Ich habe es aber noch nicht ausprobiert (mache ich jetzt)
Außerdem musst Du dringend darauf achten, dass keine Eingaben von außen in dem File landen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi,
danke funktioniert!
Aber die content.php musste ich in meine index.php auch mit dieser Funktion includen.
Gruß,
Andy
Hello,
danke funktioniert!
Aber die content.php musste ich in meine index.php auch mit dieser Funktion includen.
Das ändert aber nichts daran, dass Dein Konzept nicht in Ordnung ist.
Entweder, du arbeitest mit aktiven Inhalten. Dann steht eben überall dort, wo etwas eingebunden werden soll ein "include()" oder Du willst ein passives System von Templates, das von einer Ersetzungsmaschine durchgearbeitet wird, dann musst Du aber auch Rekursion berücksichtigen und eigene Funktionen erfinden, die nicht vom PHP-Parser, sondern von Deiner Ersetzungsmaschine abrgearbeitet werden.
Ich hatte Dich ja darauf hingewiesen, dass Funktions- und Variablendeklarationen aus den derartig includierten Dateien trotzdem ins globale Scope des Scriptes übertragen werden. Wenn sie dort schon vorhanden sind, bekommst Du einen Redeclaration Error.
Und wenn Du in Deinen eingebundenen Dateien auf PHP-Code versichten kannst, und nur solange weiter erstezt, wie {CONTENT} und seine Brüder drinstehen, dann bist Du auf dem richtigen Wege.
Wenn also Deine Datei, die bei {CONTENT} eingesetzt wird ihrerseit ein {MENU} enthält, dann usst Du das eben auch noch ersetzen lassen usw.
Dann reicht aber fread()
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
Hat sonst noch jemand ne Idee?
Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.
dann brauchst Du nur noch zwei Häkchen spendieren und ein paar spitze Klammern usw...
Jetzt erzählst du Müll, dabei war der eingeschlagene Weg so gut. Uhrzeitbedingt?
$main['content'] = '<?php include('core/content.php'); ?>';
$main['template'] = 'templates/standard/index.html'
Wie soll das funktionieren?
- Sven Rautenberg
Hello,
Jetzt erzählst du Müll, dabei war der eingeschlagene Weg so gut. Uhrzeitbedingt?
$main['content'] = '<?php include('core/content.php'); ?>';
$main['template'] = 'templates/standard/index.html'Wie soll das funktionieren?
So wie ich es geschrieben habe. Das muss man dann naürlich auch lesen.
Er schreibt statt {content} <?php include('core/content.php'); ?> in die "HTML"-Datei, lässt diese anschließend parsen und gut ist's
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Grüße,
$main['content'] = file_get_contents('core/content.php');
genau
MFG
bleicher
Hi,
Die Rückgabe meines includes als String ist "1"?
exakt.
Ich inkludiere die Datei aber in mein content-div (da wo die 1 steht), deswegen versteh ich das nicht ganz.
Du inkludierst die Datei dort, wo include() steht. Das ist der Zweck dieser Funktion.
Cheatah
Grüße,
$main['content'] = include('core/content.php');
ich weis nicht recht was include() so zurückgibt.. 1?
$main['template'] = 'templates/standard/index.html'
$template = file_get_contents($main['template']);
hast du den wert ausgeben lassen?
str_replace('{content}',$main['content'],$template);
mixed str_replace ( mixed $search, mixed $replace, mixed $subject [, int &$count] )
lass dir
$main['content']
mit echo ausgeben..was steht drin?
MFG
bleicher
Hi,
wenn ich $main['content'] ausgeben steht auch 1 da.
gruß,
Hi,
$main['content'] = include('core/content.php');
Hast du dir hier mal $main['content'] ausgeben lassen?
Include gibt den Fileinhalt (hier von content.php) nicht als String zurück, sondern gibt ihn direkt (wie mit echo) aus.
Was du in $main['content'] speicherst ist nur der Rückgabewert von include und der ist in deinem Fall anscheinend 1.
Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
also "{content}" durch eine "1" ersetzt wird.
Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.
Das hat include so an sich. Du musst den Inhalt der Datei anders in deine Variable einlesen. fread() scheint dafür brauchbar zu sein.
mfG,
steckl
Hi,
$main['content'] = fread('core/content.php',???);
wie geht das?
Andy
Hi,
$main['content'] = fread('core/content.php',???);
Das von Bleicher vorgeschlagene file_get_contents() ist wohl fread() einfacher zu verwenden wie fread().
mfG,
steckl
Das von Bleicher vorgeschlagene file_get_contents() ist wohl fread() einfacher zu verwenden wie fread().
habe gerade $main['content'] = file_get_contents('core/content.php'); gesetzt.
Doch leider funktioniert das so nicht (es passiert garnichts wenn ich auf meine menüpunkte klicke) :(
Andy