• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Templates - Problem beim einfügen

Status
Für weitere Antworten geschlossen.

Prophet

Super-Moderator
Moderator
Templates - Problem beim einfügen

Ich versuche miene seite auf templates umzustellen. so jetzt habe ich jedoch dasproblem das mein menü eine gemisch aus php-code und html ist das heißt ich kanne es nicht einfügen deswegen wollte ich fragen ob einer von euch eine idee hat wie ich den quelltext auf php durchsucher und die gefundenen stellen mit dem evaliertem code ersetzte. ich habe schon einige möglichkeiten mit preg_replace, preg_match und eval durchgespielt aber keine funktioniert...
 
Werbung:
Werbung:
Da steht doch schon alles interessante. Warum nimmst Du nicht einfach den Code?
Der ist nebenbei noch deutlich schneller als eine preg_xx Variante und sicherer als irgendwas mit eval.
 
ja schon aber bei meiner seite ist es halt so das ich auch gerne seite einfpgen würde die code enthalten....
 
Verstehe. Das ist dann ein echtes Problem, mit dem nur grössere Template-Engines wie z.B. Smarty http://smarty.php.net/ klarkommen. Die sind aber ganz schöner OverKill für kleinere Seiten.

Du könntest alternativ auch die von Dir vorgeschlagene Engine benutzen und das Resultat dann mit eval() auswerten lassen um den PHP-Code auszuführen. Finde ich persönlich aber nicht so schön. Dann doch gleich ganz PHP benutzen.
 
Werbung:
da fällt mir ein würde es nicht gehen wenn ich folgendes mache:
[php:1:189b914e51]<?php
preg_replace("/$keyword/", include('seite.php');, $template);
?>[/php:1:189b914e51]
 
Werbung:
Probier mal folgendes in der index.php (oder wie sie bei Dir heisst):

[php:1:4d08e5a72b]
<?php

ob_start();
include('seite.php');
$str = ob_get_contents();
ob_end_clean();


$vars = array (
'title' => 'Titel der Seite',
'message' => 'Inhalt der Seite'
);

$s = array();
$r = array();
foreach ($vars as $k => $v) {
$s[] = '%'.$k.'%';
$r[] = $v;
}
$str = str_replace($s, $r, $str);

echo $str;

?>
[/php:1:4d08e5a72b]

In die seite.php kannst Du dann folgendes schreiben:

[php:1:4d08e5a72b]
<title>%title%</title>

<?php

for ($i = 0; $i < 10; $i++) {
echo '%message% - ';
}

?>
[/php:1:4d08e5a72b]

PHP führt also zuerst den Code aus, per OutputBuffering wird das abgefangen und dann nach %var% gesucht und das duch die Variablen ersetzt.
Hoffe, das hilft Dir weiter!
 
Ok nochmal langsam. Ich kommentiere den Code mal.

[php:1:0061a6e150]
<?php

// Ausgabepufferung starten.
// Ab jetzt wird jede Ausgabe, die eigentlich kommen sollte
// von PHP zwischengespeichert

ob_start();

// Jetzt includiere das "Template"

include('seite.php');

// Ausgabepuffer auslesen und Pufferunge beenden

$str = ob_get_contents();
ob_end_clean();

// $str enthält jetzt den Inhalt von seite.php,
// allerdings _nach_ der Ausführung der dortigen
// PHP Skripte.

// Jetzt setzen wir ein paar Variablen...
// Immer Name => Wert

$vars = array (
'title' => 'Titel der Seite',
'message' => 'Inhalt der Seite'
);

// Und jetzt wird fröhlich ersetzt.
// Geht bestimmt noch schöner zu coden,
// Vorschläge sind willkommen

$s = array();
$r = array();
foreach ($vars as $k => $v) {
$s[] = '%'.$k.'%';
$r[] = $v;
}
$str = str_replace($s, $r, $str);

// Und alles ausgeben

echo $str;

?>
[/php:1:0061a6e150]

Dieser Code kommt z.B. in die index.php. Du kannst über die includierte Datei auswählen, welches "Template" eingebunden werden soll. Da gibts hier im Forum ja ein paar Beispiele wie man das schön über GET-Parameter und ein switch löst.

Im Template kann dann PHP-Code und Html gemischt werden. Alles was zwischen zwei Prozent-Zeichen steht wird durch das str_replace durch eine entsprechende Variable ersetzt.

[php:1:0061a6e150]
<title>%title%</title>

<?php

for ($i = 0; $i < 10; $i++) {
echo '%message% - ';
}

?>
[/php:1:0061a6e150]

Abgesehen davon, dass das natürlich kein valides Html ist, kommt bei mir dann als Ausgabe sowas:

Code:
<title>Titel der Seite</title>

Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite - Inhalt der Seite -

Klarer?
 
Werbung:
Ok das ganze hat funktioniert aber ich habe ein komisches problem:

In der index php übersetzte ich get vars:
[php:1:2e2f06d0c8]<?php
if(isset($_GET['var']))
$var = $_GET['var'];
else
$var = 'standard';
?>[/php:1:2e2f06d0c8]

diese variablen benutzte ich in den bedingungnen des menüs (einfach if abfragen).

alles funktioniert super bis auf die tatsache das er irgenwie keine der bedinugnen mehr erfüllt allso das menü nicht mehr reagiert. als ob die vars nicht mehr funktionieren...

woran könnte das liegen?
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben