[PHP] Probleme mit ereg_replace und include

m7media

since 2001
ID: 324964
L
7 Mai 2006
855
70
Guten abend!

Ich bastel gerade an einer Seite und habe ein Problem. Ich will es so bauen, das man eine Datei hat mit dem design und halt "Platzhaltern" also §pgtitel§ usw.

Allerdings habe ich nun das Problem das bei §inhalt§ (soll den Inhalt includen) das Include als erstes ausgeführt wird - und nicht erst an der stelle an der §inhalt§ steht. ich habe es schon mit functions versucht, aber irgendwie klappt nix.

Hier die wichtigen Datei-Codes:

index.php
PHP:
include("config/inc_header.php");
$site=implode("\n",file("template/$pgtemplate/design.m7t"));
$site = ereg_replace("§pgtitel§",$pgtitel,$site);
$site = ereg_replace("§inhalt§",get_site(),$site);
echo $site;

config/inc_header.php
PHP:
include("config/cfg_mysql.php");
include("config/inc_getcfg.php");

config/inc_getcfg.php
PHP:
function get_site() {
$show = $_GET["show"];
if($show) { include("show/$show.php"); }
else { include("show/home.php"); } }
 
  • Warum implode?
  • Warum ereg_replace und nicht das wesentlich bessere str_replace?
Datei _richtig_ einlesen und dann für die Funktionen die entsprechenden Dateien zusätzlich einlesen (vorher Sicherheitsprüfung!)

Dann die entsprechenden Stellen ersetzen und ausgeben.
 
  • Warum implode?
  • Warum ereg_replace und nicht das wesentlich bessere str_replace?
Datei _richtig_ einlesen und dann für die Funktionen die entsprechenden Dateien zusätzlich einlesen (vorher Sicherheitsprüfung!)

Dann die entsprechenden Stellen ersetzen und ausgeben.

1.) Implode, weil erst die Sachen geändert werden sollen und dann ausgegeben werden soll. Include gibt ja sofort aus ;)
2.) Weil ich das str_replace nicht wirklich kannte - Danke, geändert ;)

Und wie du das mit dem Richtig einlesen meinst - kA :-?
 
also normalerweise macht man das so:
man erstelt eine Designdatei:

PHP:
<html>
$head$
<body>
$menu$
$text$
</body>
</html>
diese Datei wird dann geöffnet und in eine Variable eingelesen

dann gibt's z. B. eine head.inc oder so und in der steht dann:
PHP:
<title>...
und sowas sowas drin und diese wird auch eingelesen und mit str_replace dann das $head$ ersetzt.

Und stellt man dann nach und nach die Seite zusammen.
Zumidnest würde ich es so machen ;)

Das implode empfinde ich als extremen Unsinn.

Datei also mit fopen, file oder file_get_contents öffnen und eventuell gleich in Variable speichern oder dann mühsam manuell - je nach gewähltem Befehl und dann ersetzen und zum Schluss ausgeben

PS: "nettes" Ava
PPS: bitte Fullquotes lassen. Danke :pray:
 
Hm okay,

Wenn ich anstelle von dem "get_site()" n Text eingeb (also str_replace("§inhalt§", "Test", $site)) dann klappt es einwandfrei und das "Test" wird da angezeigt wo es hinsoll - nur sobald da n Include-Befehl hinkommt haut er es direkt nach oben :-?


Edit: Bilder ;)
So soll es Sein - Das "Test" ist an der richtigen stelle!


So ist es falsch - Das Include muss dahin wo vorher "test" stand
 
Zuletzt bearbeitet:
*hochhol* Hab noch was andres versucht.

PHP:
$show = $_GET["show"];
if($show) { $pginhalt=implode("\n",file("show/$show.php")); }
else { $pginhalt=implode("\n",file("show/home.php")); } 




$site = str_replace("§pgtitel§",$pgtitel,$site);
$site = str_replace("§inhalt§",$pginhalt,$site);
echo $site;
klappt aber auch nicht. Text wird wunderbar ausgegeben, aber PHP-Codes nicht ausgeführt :-?
 
klappt aber auch nicht. Text wird wunderbar ausgegeben, aber PHP-Codes nicht ausgeführt :-?

schonmal smarty versucht?

*hochhol* Hab noch was andres versucht.

PHP:
... include
... str_replace
alles richtig ... aber du kannst die seite nicht einfach mit echo ausgeben, wenn du den darin enthaltenen php-code ausführen willst.

entweder machst du folgendes furchtbar schlechtes, wofür mir gleich einer der programmierer die latschen um die ohren hauen wird:
PHP:
eval( "?>$site<?" );

oder du benutzt sinnvollerweise in deiner datei statt "§pgtitle§" einfach "$pgtitle" und arbeitest mit include, ohne den ersetzen-firlefanz ...

oder wie gesagt: schau dir mal smarty an, und dann hast du keine probleme mehr mit sowas :)
 
Zuletzt bearbeitet:
Wenn du willst, das der PHP - Code interpretiert wird, dann schau dir mal die funktion eval an ^^ die sollte helfen! Hab ich in meinem CMS für die Einindung der Templates benutzt!

EDIT: Mist zu lahm :(

---zyclop
 
wer einmal damit gearbeitet hat, gibt es nicht wieder her^^
absolute Empfehlung, sauberer lässt sich nicht programmieren. Code und Design 1a getrennt

Naja,

der Sinn eines Templatesystems ist eigentlich dass der Programmcode, d.h. sämtliche logischen Operationen vom Layout - der stumpfen Ausgabe getrennt sind.

Allerdings gelingt dies, weil man ja manchmal z.B. eine Schleife braucht, nicht immer.

Gruß
 
der Sinn eines Templatesystems ist eigentlich dass der Programmcode, d.h. sämtliche logischen Operationen vom Layout - der stumpfen Ausgabe getrennt sind.

ist das ein für oder wider? smarty kannst du rein als designer einsetzen aber auch "mal schnell" ein bisschen programmcode zusammenbasteln. z.b. bei der ausgabe von tabellen mache ich mir die fertigkeiten von smarty sehr zu nutze. letzendlich "programmiere" ich damit die ausgabe so, wie ich sie haben will. entweder als ellenlange liste oder als mehrseitige anzeige. alles rein über smarty gelöst. ich denke es lässt sich darüber streiten, ob die darstellung in dieser art in den programmcode gehört oder sache des layouts ist. ich meine, dass das layout auch gern plexiebel sein darf und nicht nur starr variablen ausgibt.

... denn sonst müsste der "designer-code" einer website so aussehen:

HTML:
<html>{$content}</html>
 
Ich würde auch für ein Templatesystem a la Smarty plädieren, aber nixdestotrotz muss ich hier zu der eval()-Geschichte eins loswerden:

Bevor man sowas macht, sollte man sich evtl. mal mit den Möglichkeiten des Outputbuffers vertraut machen.
 
ist das ein für oder wider? smarty kannst du rein als designer einsetzen aber auch "mal schnell" ein bisschen programmcode zusammenbasteln. z.b. bei der ausgabe von tabellen mache ich mir die fertigkeiten von smarty sehr zu nutze. letzendlich "programmiere" ich damit die ausgabe so, wie ich sie haben will. entweder als ellenlange liste oder als mehrseitige anzeige. alles rein über smarty gelöst. ich denke es lässt sich darüber streiten, ob die darstellung in dieser art in den programmcode gehört oder sache des layouts ist. ich meine, dass das layout auch gern plexiebel sein darf und nicht nur starr variablen ausgibt.

Ich habe nur gesagt, dass Layout und Programmlogik (Schleifen etc) nie 100%ig getrennt werden können.

Ich setze übrigens selber gerne auf smarty, auch wenn man dafür nochmal einige Befehle neulernen muss ;)