[PHP] Templates über Implode

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
Wie kann man am einfachsten mit Templates in PHP arbeiten, ohne groß welche Klassen zu benutzen??? Habe mal den unteren Code erstellt, der wohl aber net so sinnvoll ist, da man bei Auflistungen immer 3 Dateien braucht.

PHP:
  $template    =    file("head_users.tpl");
  $template    =    implode("",$template);
  echo $template;

  $query = mysql_query("SELECT * FROM users");
  while($row = mysql_fetch_array($query)) {

    $template    =    file("users.tpl");
    $template    =    implode("",$template);
    $template    =    str_replace("{id}", $row['id'], $template);
    $template    =    str_replace("{name}", $row['name'], $template);
    $template    =    str_replace("{status}", $row['status'], $template);
    echo $template;
    }

  $template    =    file("foot_users.tpl");
  $template    =    implode("",$template);
  echo $template;

head_users.tpl:
HTML:
<table>
  <tr>
    <td>id</td>
    <td>name</td>
    <td>info</td>
  </tr>

users.tpl:
HTML:
  <tr>
    <td>{id}</td>
    <td>{name}</td>
    <td>{status}</td>
  </tr>

foot_users.tpl:
HTML:
</table>

So wies sein soll wirds ausgegeben, ist aber dennoch zu "schwer/unübersichtlich", kennt vllt. jemand von euch ne andere Lösung es einfacher zu lösen, anstatt so kompliziert :D.
 
Warum teilst du das Template nicht einfach in header und footer und baust dieses in jede Datei per

PHP:
<?php
include("header.php");
?>

Scriptausgabe

<?php
include("footer.php");
?>

ein.
 
groening schrieb:
Warum teilst du das Template nicht einfach in header und footer und baust dieses in jede Datei per

PHP:
<?php
include("header.php");
?>

Scriptausgabe

<?php
include("footer.php");
?>

ein.

Diese Variante ist nicht rentabel. Man kennt sie aus dem VMS. Grund ist einfach und schnell erklärt. Siehst du dir mal deine Webseite an:

Menüs - header.php
Basisskript - basis.php
Mneüs - footer.php

So nun schreibe ich einem User eine PN, die im linken Menü angezeigt wird. (header.php). Der sieht nun im linken menü "Sie haben 1 neue PN", freut sich, und öffnet diese. Was passiert?

Beim wechseln der seite geht es durch die header.php folglich erscheint immer noch "Sie haben 1 neue PN" das Basisskript zeigt nun die PN aber schon an.


Anderes Beispiel: Du zahlst gerade auf einer Loseseite 1 Mio Lose ein. Nun steht in der Linken Navigation Sie haben 0 Lose, und im Zentrum der Seite sie haben erfolgreich 1 Mio Lose eingezahlt. :ugly:

Dehalb sollte man immer erst die Basis berechnen, das was sich abspielen soll. Dann die ganzen Menüs hinterher. Mit Templates wird das ganze dann zu einer geordneten Seite zusammengestellt.

Das schont dann auch noch die eigentliche Bestimmung. Trennung von HMTL und PHP Code, und die leichtere Wartbarkeit des Codes.
 
tester schrieb:
Moin,
Wie kann man am einfachsten mit Templates in PHP arbeiten, ohne groß welche Klassen zu benutzen??? Habe mal den unteren Code erstellt, der wohl aber net so sinnvoll ist, da man bei Auflistungen immer 3 Dateien braucht.

1.) Benutze doch bitte mysql_fetch_assoc statt fetch_array, wenn du nur auf aosozative Schlüssel zugreifen willst.

fetch_array = ...[0]....[1] und ...['spalte1']...['spalte2']
fetch_assoc = ...['spalte1']...['spalte2']

das array wird kleiner und die Leistung wesentlich niedriger.

2.) Du musst nur 2 Dinge beachten. Du brauchst deine Variable, dein Start und dein Endpunkt. Das hast du ja: {variable}

Nun ersetzt du deine Variable in ihren Wert. Das wäre die simpleste Lösung.

PHP:
<?
$meintpl = "Hallo {welt}";
$welt = "Klammer";
function get_value($int) {
	@eval('global $'.$int.'; $a = $'.$int.';');
	return $a;
}
echo preg_replace("/\{(.*)\}/Ue","get_value('\\1')",$meintpl);
?>


hoffe es hilft dir weiter!
 
Öhrm, statt implode("", file('foobar.txt')); bietet sich file_get_contents() an.

Und bei solchen Dingen frage ich mich immer, was gegen Klassen spricht. Dass Smarty sehr gross ist, mag sein, aber was hindert einen daran, die Klasse von Hand abzuspecken, bis sie den eigenen Bedürfnissen angepasst ist?
 
ich würde auch die verwendung von klassen empfehlen. sicherlich möchtest du ja dein geschriebenes templatesystem auch in künftigen scripts von dir einbauen und da bietet sich das ja an.
 
ABC schrieb:
Diese Variante ist nicht rentabel. Man kennt sie aus dem VMS. Grund ist einfach und schnell erklärt. Siehst du dir mal deine Webseite an:

Menüs - header.php
Basisskript - basis.php
Mneüs - footer.php

So nun schreibe ich einem User eine PN, die im linken Menü angezeigt wird. (header.php). Der sieht nun im linken menü "Sie haben 1 neue PN", freut sich, und öffnet diese. Was passiert?

Beim wechseln der seite geht es durch die header.php folglich erscheint immer noch "Sie haben 1 neue PN" das Basisskript zeigt nun die PN aber schon an.


Anderes Beispiel: Du zahlst gerade auf einer Loseseite 1 Mio Lose ein. Nun steht in der Linken Navigation Sie haben 0 Lose, und im Zentrum der Seite sie haben erfolgreich 1 Mio Lose eingezahlt. :ugly:

Dehalb sollte man immer erst die Basis berechnen, das was sich abspielen soll. Dann die ganzen Menüs hinterher. Mit Templates wird das ganze dann zu einer geordneten Seite zusammengestellt.

Das schont dann auch noch die eigentliche Bestimmung. Trennung von HMTL und PHP Code, und die leichtere Wartbarkeit des Codes.

Die Logik ist absouluter Blödsinn. Dadurch das der Header und der Footer getrennt sind kannst du diesen an jeder Stelle im Script einbauen. Natürlich muss die Trennung dazu Sinn machen. Deine Logik mit der PN oder der Millionen würde nur greifen wenn man vom Programmieren nichts versteht. Ob da steht das du ne PN hast oder nicht liegt am Code und nicht am Template. Es wird ja nicht nur der mittlere Teil der Seite geladen sondern die ganze Datei in welcher header und footer auch wieder aufgerufen werden. Die berechnungen finden dann statt bevor der header eingebunden wird. Und schon sind alle Inhalte aktuallisiert bevor Sie angezeigt werden.

Der Threadersteller wollte ne einfache Lösung die funktioniert. Das tut Sie auch wenn man weis wie man Sie nutzt. Wenn du dir mal große Dienste und deren Scripte ansiehst wirst du feststellen das dort meistens per Header und Footer gearbeitet wird. Gerade für User ohne Erfahrung die dann die Scripte Kaufen ist so ein System von Vorteil. Z.B das Jagusch Templatesystem ist nur von Proggern zu verstehen. Ein Leihe der da was ändern will braucht immer Hilfe von dritten.

Natürlich gibt es viel bessere Systeme die auch mehr hergeben, aber das sind nun mal meine Erfahrungen.
 
das includen von header.php und footer.php hat absolut nichts mit templates zu tun.
 
Natürlich hat es das. Ich teile ein Teplate da wo ich den Code ausführen will und include das in den Code. Und schon wurde das TEMPLATE eingebunden.

Ich sagte ja schon
Natürlich gibt es viel bessere Systeme gibt
Ich sagte aber auch das der Threadersteller eine Alternative gesucht hat welche ich ihm mit dem Beispiel aufzeigen wollte.
 
Zuletzt bearbeitet:
eine php-datei ist doch keine template-datei. da ist doch php-code drin und keine platzhalter für variablen.

und da bringt es auch nichts, schlechte renomees zu verteilen. was so ist, das ist so.
 
Auch in einer PHP datei kann sich html code befinden. Es gibt eine menge Scripte wie z.B Mailtauschscript welche auf diesem System aufgebaut sind und bestens funktionieren.

Ich sagte ja bereits das es bessere Lösungen gibt, aber der Threadersteller hat nach einfachen Lösungen gesucht.

und da bringt es auch nichts, schlechte renomees zu verteilen. was so ist, das ist so.
Sorry aber für nen schlechten Beitrag gibt es auch eine schlechte Bewertung. Ich finde Rachebewertungen wie du Sie tätigst wesentlich bedenklicher und nicht im Sinne der Erfindung.

So und nun ist doch gut. Das ganze stellt nur ein Beispiel dar und ist die Aufregung nicht wert :D.
 
Zuletzt bearbeitet: