[PHP] Template Class

Sascha
So hier mal der Aufbau einer Template Class:


tpl.php - ./tpl.php
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?PHP
function gettemplate($template,$endung="tpl")
{
return str_replace(""",""",implode("",file(tpl."/".$template.".".$endung)));
}
function dooutput($template) {
echo $template;
}
?>



index.php - ./index.php
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
<?php

include("./tpl.php");

// hier kannste dann noch PHP Code einfügen.

// hier ein Beispiel für Datum und Uhrzeit
$DAt date("YmdHis");

eval ("dooutput("".gettemplate("index")."");");


?>



index.tpl - ./tpl/index.tpl
php:
1:
2:
3:
4:
5:
6:
<?php <html>
<head>
<title>Test</title>
</head>
<body>
Heute ist der $DAt Ist das nicht schön ?>




Ich hoffe ich hab es euch so einfach wie möglich gemacht.

Natürlich kann man das ganze noch erweitern. Aber so ist der Aufbau einer template class mit allen möglichen dateien.

Mfg
Sascha
Snoop1
hi, ich habe ne frage wie kann ich mit deiner template class mehrere templates verschachteln ?

Sprich zb.: ein haupttemplate und ein menu template links

oder halt ähnlich

kannst du mir ein beispiel geben wäre echt net

und übrigens die Klasse ist super. sehr einfach genau richtig für mich smile )
MMB
Natürlich kannst du die Templates verschachteln. Du speicherst einfach ein Template (zB Menü) in eine Variable, die du im Andern ausgibts.
Snoop1
und wie hat das auszusehen ?? so :

php:
1:
<?php $Menu = eval ("dooutput("".gettemplate("menu")."");"); ?>
Snoop1
habe gemerkt das ich nen fehler gemacht habe ich muss die php ja ausgeben smile )
Snoop1
shit bekomme es nicht hin hilfeeeeeeeeeeeeeeeeeeee :))))))))
neonator
würds mal so probieren:
php:
1:
<?php eval ("$Menu = "".gettemplate("menu")."";"); ?>


ps: bin nicht sicher aber ich glaube, eval gibt nie was zurück... also ist das: $menu = eval(... eigentlich gar nicht möglich...
aber wie gesagt, ich bin mir nicht ganz sicher...
Augenzwinkern
Snoop1
hi, also ich habe es noch nicht ausprobiert ob es so funktioniert aber was mir aufgefallen ist is folgendes ich kann das template zwar laden aber ich kann leider keine php funktion intigireren zb. wie generieren des menu welches in einer seperaten php datei liegen muss .

Mit include funzt dies leider net also bitte ratschläge oder sogaR KOMPLETTES BEISPIEL welches mir lieber wäre !
MMB
In den Templates kannst du natürlich kein php benutzten und das Menü musst du dann über eine Function (oder ähnliches) in eine Vraible laden und dass dann im Template ausgeben.
Snoop1
wäre es denn möglich mir ein beispiel zu machen ??
MMB
Das, was du in der Menü Datei hast, speicherst du einfach in eine function und mitder gibst du das Menü zurück. In Function musst du nur echo durch eine Variable ersten, die den Rückgabewert speichert. Das Ergebnis beim Aufrufen speicherst du in einer Variable, die in deim Template ausgeben wird. Soeinfach ist das.
Snoop1
wie ich sehe bekomme ich hier nicht die hilfe die ich mir erdacht habe auch gut .

Beispiele sind hier wohl nicht gang und gebe oki aber danke für den versuch

vielleicht kann mir ja jemand irgendwie ein Beispiel machen

Danke
MMB
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php function menu(){
$array = array("Home" => "index.php""News" => "news.php");
foreach($array as $name => $url)
$return .= "<a href="$url">$name</a><br>";
reutrn $return;
}
// dann in deiner Datei:
$menu menu();
// und im template
<td>$menu</td?>
Snoop1
Danke für die hilfe das parsen 2er templates habe ich jetzt auch hinbekommen smile

Habe nur noch ne kleine frage habe jetzt in meinen scripten ungefähr 15 functionen wäre es möglich oder sinnvoll diese functionen in eine fuction.php oder so zu schreiben und diese in die sctipte zu includen ?
chrigu99
schreib alles wie folgt in ne php-datei:

<?

functions

?>

in den dateien in denen die funktionen verfügbar sein sollten schreibst du zuoberst (nicht zwingend) folgendes:

include("functions.php");

oder ähnlicher dateiname...

es ist immer empfehlenswert die funktionen in ner funcions zusammenzufassen, meiner meinung nach...
auch schon bei 3 oder weniger funktionen...

try it und schreib ergebnisse rein... Augenzwinkern
Snoop1
So ich mal wieder Augenzwinkern

Also ich habe einiges geschaft auch die template class zu erweitern, nur ich habe mich gefragt ob es möglich is statt in den templates die platz halter so auszugeben $platzhalter diese mit {} zu versehen

is dies möglich wenn ja wie?

bitte die obenstehende class verwenden !!
chrigu99
keine ahnung, verwirrt verwirrt verwirrt bin ja wie bekannt ein html hasser!! cool
chrigu99
(so wegen templates und so... lol)
The Rattlesnake
Das hört sich ja alles noch verständlich an und ist gut nachzuvollziehen. Aber wie funktioniert es dann bei Datenbankabfragen?

Nach dem Motto:
php:
1:
2:
3:
4:
5:
<?php mysql_query("SELECT name, herkunft FROM test ");
.....
while(...) {
  $template_x
?>


und in der template steht dann
code:
1:
2:
3:
4:
5:
6:
<html>
...
<body>
  bla....$row->name.....bla.....$row->herkunft....bla
</body>
</html>




und das Template wird dann solange es die Schleife durchläuft mit den jeweiligen Datenbankinhalten ausgestattet?
The Rattlesnake
Ich bekomme .php3 files irgendwie nicht zum laufen. Kannst du mir mal die Registryeinträge dafür per Mail schicken?
Konnte deswegen ich PHPMyAdmin nicht zum laufen bekommen. Aber habe den Query trotzdem rausgfunden.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<?php
# connect -> hier alles ausfüllen!
$db_host "";
$db_name "";
$db_user "";
$db_passwort "";
@MYSQL_CONNECT($db_host,$db_user,$db_passwort)
@MYSQL_SELECT_DB($db_name);

# neuen User erstellen (hat alle Rechte)
$username "";
$passwort "";
$passwort md5($passwort);
INSERT INTO user VALUES('$db_host''$username''$passwort''Y''Y''Y''Y''Y''Y''Y''Y''Y''Y''Y''Y''Y''Y');
?>


Du musst erst mit der DB connecten (setzt einen Zugriff mit Adminrechten voraus!) und dann username und passwort für den neuen User wählen, ausführen, fertig