Templates mit php

Ich habe ein Tutorial (Templates mit php) durchgearbeitet.
Wie kann ich eine Zeile mehrmals ausgeben; Beispiel: Newssystem:

news.tpl:
[color=#0000FF]

{$title} {$text}

[/color]

news.php<?php include("template.class.php"); $tpl = new Template(); // Laden $tpl->load("news.tpl"); // Laden des tpl's while ($row = mysql_fetch_array($res)) { $tpl->assign("titel", $row['title']); $tpl->assign("text", $row['text']); } $tpl->out(); // Ausgabe // So kann es nicht funktionieren ?>
Für die while-Schleife soll das Blaue ausgegeben werden.
Die Klasse: http://do-it-yourself.bplaced.net/template.class.phps (ist hoffentlich verständlich kommentiert und sehr simpel gehalten)

Dafür muss die Template-klasse schleifen Parsen und das Tut diese nicht.
Diese hier aber schon: F1-Template Klasse
Kannste dir ja mal anschauen.

If’s, Blöcke, Variablen, Sessions, Cookies, Includes - Sie kann alles wichtige.

mfg

deie klasse scheint den buffer des templates mit “load()” immer wieder zu überschreiben, wenn ich mich nicht verguckt hab.
Dann sollte dashier theoretisch möglich sein:

...
while ($row = mysql_fetch_array($res))
{
   $tpl->load("news.tpl"); // Laden des tpl's
   $tpl->assign("titel", $row['title']);
   $tpl->assign("text", $row['text']);
   $tpl->out(); // Ausgabe
}
...

also einfach in der schleife die news.tpl neu laden und auch noch in der schleife ausgeben
Voraussgesetzt, dass in der news.tpl wirklich NUR der blaue text steht und sonst nichts!

Besonders schön ist es nicht, vielleicht solltes du dir mal die Templateklasse anschauen, die wccw vorgeschlagen hat (kenn sie aber selber nicht, und kann ich daher auch nicht beurteilen).

mfg Balmung

Richtig, ist aber nicht der sinn der eigentlichen sache, einer schleife. :p

Da könnte man auch direkt

$file = implode(file('news.tpl')); $file = str_replace("{\$halter}",$inhalt,$file); echo $file; benutzen. o.0

Und wie Du schon sagtest: NUR wenn nichts anderes in der news.tpl steht, ist diese Variante möglich.

mfg

davon mal abgesehen halt ich von template klassen, die irgendwelche oder {loop} jedesmal parsen und Variablen mit str_replace austauschen nicht sonderlich viel…
Das beeinflusst die Geschwindigkeit des Scripts doch um einiges, wenn es etwas umfangreicher ist.

Joomla stützt auf Templates, in denen man PHP in vollem umfang nutzen kann (so ähnlich mach ich es selber immer).

phpBB3 (meine ich jedenfalls) übersetzt die Templates in PHP und speichert diesen PHP-Quelltext als Cache, und nutzt den solange, bis man im Admin Panel auf “reset” (Cache löschen) klickt… ist von der Funktionsweise also ganz ähnlich wie die recht bekannte Template engine Smarty
Änderungen am Template werden dann also erst wirksam, wenn man den Cache löscht.

mfg Balmung

Der sinn einer Template-klasse ist, dass man den HTML-Code vom eigentlich PHP-Code trennen kann und nicht, dass man PHP direkt im File benutzt. Das Cachen find Ich auch sehr sinnlos. Und Smarty ist eh viel zu groß, viele Funktionen werden von den meisten erst gar nicht benutzt, usw…

Muss ja jeder selber wissen, ob er eine Klasse benutzt oder nicht. :wink:
Über ladezeiten kann Ich mich nicht beschweren.
Es läuft genau so schnell, als würde Ich HTML direkt in der PHP-datei verwenden.

mfg

über den “Sinn” lässt sich streiten. Für sinnvoll halt ich es nicht, wenn es die Geschwindigkeit des gesamten einschränkt, denn schneller als PHP Direkt zu nutzen isses niemals.

Das Argument, dass “Designer”, die keine Ahnung von PHP haben, vom php-gewusel verwirrt werden, zieht bei mir nicht.
Wenn man seinen Inhalt vernünftig aufbaut, reicht es auch vollkommen, wenn man dem “Designer” Zugriff auf die CSS Dateien gibt, und nur wirklich im notwendigsten fall auch auf die Templates selber…

und wieso sollte das Cachen sinnlos sein?
Das ist doch eine optimale Zwischenlösung.

Naja, das ist Deine Meinung, aber nicht die Meinung der vernünpftigen Entwickler. :p
Nicht umsonst wurden solche Klassen gemacht.
Was machste denn, wenn Du mehrere Designs benutzen willst ?

Sagen wir mal, im Template „dumbldoor“ ist die Forum-struktur so aufgebaut:
— Kategorie
– Forum

Und im Template „harry“ so:
— Kategorie - Forum - Forum - Forum — UnterForum
— …

Da kannste nicht mal eben zwei Foren-übersichten erstellen - nagut können schon, man kann es sich natürlich noch schwerer machen, als es notwendig wäre.
Eine Css datei, das reicht nicht immer.

mfg

Nur komisch, dass die großen Entwickler (phpBB3, Joomla) auf Caching und PHP Direkt stützen…?

Wie ich gesagt hab: im notwendigsten Fall kann man ja auch die Templatedateien bearbeiten…
Aber das ist nicht mein Hauptkritikpunkt.
Es ist nunmal Tatsache, dass diese Templates, die von einem PHP-Script (welches zuvor von PHP Selber erstmal geparst und ausgeführt werden muss) geparst werden müssen, langsamer sind. Manchmal sogar spürbar langsamer (ich geb zu, PHP ist schon sehr optimiert und daher spürt man den Unterschied kaum, aber bei einer Seite mit Besuchern im vier- oder fünfstelligen Bereich (oder noch mehr) ist das schon von Bedeutung).

Da ist es doch besser die Templates direkt mit PHP ausführen zu lassen
PHP ist schon eine Scriptsprache die erst geparst werden muss, und mit einem Parser einen Parser parsen… naja, nicht Sinnvoll.

Noch was:
PHP ist immer gleich… wenn man sich als „Designer“ ein paar kleine PHP Kenntnisse zulegt, kann man in jedem php-basierendem Template seine Kenntnisse umsetzen.
Diese Garantie gibt es aber nicht bei den non-php-templates.
Der Syntaktische Aufbau solcher Templates variiert von Engine zu Engine, und „Designer“ müssen sich immer wieder neu einarbeiten.

edit naja so langsam schweifen wir ab, vll sollten wir es dabei belassen oder so :<
edit 2 oder möchtest noch was sagen? :smiley:

mfg Balmung

Im phpBB3 wird es nach meiner meinung auch gemacht.
Ich möchte mich jetzt nicht streiten, aber Du hast einfach in vielen teilen unrecht.
Ich finde, die leute sollten schon 2 milisekunden länger warten können, und das tuen sie auch.

phpBB3, Joomla große entwickler ? :smiley:
Die Benutzer haben sie so „angeblich“ GROß gemacht.
Die die PHP entwickelt haben, dass sind große entwickler.

[quote]Wie ich gesagt hab: im notwendigsten Fall kann man ja auch die Templatedateien bearbeiten…[/quote] Na sicher!
Benutzer: Ich möchte jetzt mal das neuste Design ansehen
Webmaster: Ja warte, ich muss mal eben das ganze Script umschreiben
Benutzer: Na super!
Omg… :ps:

[quote]Da ist es doch besser die Templates direkt mit PHP ausführen zu lassen[/quote] Wenn man eine einzige Seite hat, dann schon.
Bei einem größeren Projekt mit sicherheit nicht.

[quote]PHP ist immer gleich… wenn man sich als „Designer“ ein paar kleine PHP Kenntnisse zulegt, kann man in jedem php-basierendem Template seine Kenntnisse umsetzen.[/quote] Es gibt nicht nur einen Designer auf dieser Welt. :unamused:

So, nun werde Ich nichts mehr dazu schreiben, es ist alles geschrieben.
Jetzt sollte sich mal der Thread-poster zu Worte melden.

mfg

Hey Leute,
bitte keinen Streit!

:hail: Danke für die zahlreichen Posts :hail:

Dein Link hat mir zwar nichts gebracht, aber das Stichwort „Blöcke“ hat mit sehr geholfen.

Templates benutzt man, um die nicht php’ler unter die Arme zu greifen und den Code vom Design zu trennen. Da nehme ich gerne die längere Ladezeit im Kauf, weil das programmieren viel schneller geht!

@Balmung: Das ist mir bewusst, dewegen habe ich die Frage gepostet.

Ich habe jetzt Blöcke:
[size=85]Hallo {$name}.

{$counter}
[/size]

Warum funktioniert das folgende nicht?
[size=85]// Teile des Templates ausgeben
protected function getSubpart($name){
$pos1 = strpos($this->template, „“);
$pos2 = strpos($this->template, „“);
return substr($this->template, $pos1+strlen(""), $pos2-$pos1-strlen(""));}

// Teile des Templates austauschen
protected function replaceSubpart($name, $replacestr){
$pos1 = strpos($this->template, „“);
$pos2 = strpos($this->template, „“);
$this->template = substr_replace($this->template, $replacestr, $pos1, $pos2-$pos1+strlen(""));}[/size]

Ohne protected gibt es keinen Fehler aus, erstellt aber ein neues Template über das andere:
[size=85]$tpl->assign(„name“, „Benutzer“);
// Template mit schleife
$loopPart = $tpl->getSubpart(„loop“);

$out = „“;
for ($i = 0; $i < 10; $i++){
$tpl_2 = new Template($langs, $langs, $loopPart);
$tpl_2->assign(„counter“, $i);
$out .= $tpl_2->out(1);}

$tpl->replaceSubpart(„loop“, $out);[/size]