Willkommen in der Webstatt Zum Webstatt Blog und Stories
trefixxx am 12.08.06 00:51

N'abend,

ich möchte eine seite ganz in templates aufbauen (http://www.gag-greven.de)
Natürlich weiß ich was das ist, was der Sinn dahinter ist und wie das im groben funktioniert. Nun stehen aber in den sämtlichen (Smarty)Tutotorials lediglich, wie ich aus dem Logikbereich in das Template reinlade.
Nichts steht aber davon, wie man tabellen aufbaut, wie man in verbindung mit datenbanken arbeitet, wie schleifen eingebaut werden etc. etc.
Ich möchte eine sehr genaue und verständliche Einweisung haben...

Welches Template System ist hier überhaupt das beste/sinnvollste? Was ist zu empfehlen?

netcup.de Warum gibt es hier Werbung?
Kevz am 12.08.06 11:47

Bezüglich der Verbindung mit Datenbanken & co, dazu musst du dich an MySQL anwenden. Smarty ist nur ein Template System - kein all round System! Smarty is aber dennoch eine gute wahl, im großen und ganzen ist es nicht schwer - sehr komplex und das Cachen ist auch Interessant.

Michael Michael am 12.08.06 12:32

Kevz hat vollkommen Recht. Smarty - oder jedes Templatesystem allgemein - kümmert sich "nur" um die Ausgabe, nicht um die Programmierlogik. Das machen auch Templatesystem mit Datenbankanbindung nicht.

Zu Smarty: Das System kann sehr viel, wenn man sich einmal an die Syntax gewöhnt hat ist es halbwegs einleuchtend, durch eine Art compilen der Templates ist es schnell. Negativ kann man natürlich anführen, dass es für 99% der Projekte vollkommen überdimensioniert ist.

Es gibt nicht das eine einzige beste Templatesystem. Man muss immer abwägen, welche Punkte wichtig sind. Beispielsweise ist ein konkret auf die Anforderungen zugeschnittenes System sicherlich optimal allerdings lohnt es sich quasi nie, für ein Projekt ein eigenes Templatesystem zuschreiben.

Wenn du nicht die Funktionsvielfalt von Smarty brauchst ist http://pear.php.net/package/HTML_Template_IT einen Blick wert (gibt es auch ohne nervige PEAR Anbindung) oder erweitert http://pear.php.net/package/HTML_Template_Sigma

dookie dookie am 12.08.06 13:48

Ich finde Templatesysteme (meistens) ziemlich schwachsinnig. Alles was man mit einem Templatesystem wie Smarty machen kann, kann man auch ohne zusätzlichen Code ohne Smarty machen. Mit PHP kann man doch ganz einfach HTML und Programmierlogik Trennen.
<?php
$title = 'foo';
$content = 'blabla';
$sql = mysql_query('SELECT foo FROM bla');
include 'template.tpl.php';
?>

<!-- template.tpl.php -->
<title><?=$title?></title>
<!-- ... -->
<p><?=$content?></p>
<table>
<?while ($row = mysql_fetch_assoc($sql):?>
<tr>
<td><?=$row['foo']?></td>
</tr>
<?endwhile?>
</table>


Für was braucht man da Smarty/$beliebiges_templatesystem? Sowas erzeugt nur unötigen Overhead und hat keinen rechten Nutzen. Smarty hat zwar noch Caching, aber dafür kann man auch ein reines Caching System benutzen.

Kevz am 12.08.06 14:31

Btw.:
Das hast doch schon recht in der hinsicht. Aber man muss beachten - das es doch damit das ganze sozusagen verfeinert / verschönert. Damit der Code nicht ganz so entstellt aussieht. Aber am ende muss es jeder selbst wissen was er nutzt, hauptsache es Funktioniert und man versteht das ganze. ;)

Michael Michael am 12.08.06 21:30

Der Vorteil eines Templatesystems ist ja gerade, dass es im Idealfall keine Programmierkenntnisse erfordert.
Wenn du dir deine "Templatedatei" genau anschaust, merkst du auch, dass es quasi nur syntaktische Unterschiede sind. Ob ich nun <?=$content?> oder {content} schreibe ist ja vollkommen egal.

Ein weiterer Vorteil von Smary (oder einer anderen sinnvoll konzipierten Templateklasse) ist, dass die komplette Ausgabe gekapselt und vom PHP Code getrennt wird. Im besten Fall sollte im gesamten Code ja nur ein echo/print oder ähnliches stehen, nämlich am Schluss bei der Templateausgabe.

dookie dookie am 12.08.06 21:40

Quote
Original von Michael
Der Vorteil eines Templatesystems ist ja gerade, dass es im Idealfall keine Programmierkenntnisse erfordert.

Das ist aber bei den wenigsten der Fall, denn man muss immer mal mit Schleifen oder if-Abfragen arbeiten, wenn man Templates baut und das ist ja eigentlich auch schon eine Art Programmierung.

Quote
Original von Michael
Wenn du dir deine "Templatedatei" genau anschaust, merkst du auch, dass es quasi nur syntaktische Unterschiede sind. Ob ich nun <?=$content?> oder {content} schreibe ist ja vollkommen egal.

Genau. Und wieso sollte ich dann Smarty o. ä. benutzen? Da habe ich nur Overhead.

Quote
Original von Michael
Ein weiterer Vorteil von Smary (oder einer anderen sinnvoll konzipierten Templateklasse) ist, dass die komplette Ausgabe gekapselt und vom PHP Code getrennt wird. Im besten Fall sollte im gesamten Code ja nur ein echo/print oder ähnliches stehen, nämlich am Schluss bei der Templateausgabe.

Das habe ich doch auch. Ich muss nur am Ende ein include 'main.tpl.php' oder so machen und das gesamte HTML Zeugs wird ausgegeben.

Michael Michael am 12.08.06 22:12

Quote
Original von dookie
[quote]Original von Michael
Der Vorteil eines Templatesystems ist ja gerade, dass es im Idealfall keine Programmierkenntnisse erfordert.

Das ist aber bei den wenigsten der Fall, denn man muss immer mal mit Schleifen oder if-Abfragen arbeiten, wenn man Templates baut und das ist ja eigentlich auch schon eine Art Programmierung.[/quote]

Deswegen steht dort Idealfall. Weiterhin bezog sich dies eher auf logische Unterschiede. Darüber ob eine IF Schleife Programmieren ist kann man auch sicherlich diskutieren.

Quote
Original von dookie
[quote]Original von Michael
Wenn du dir deine "Templatedatei" genau anschaust, merkst du auch, dass es quasi nur syntaktische Unterschiede sind. Ob ich nun <?=$content?> oder {content} schreibe ist ja vollkommen egal.

Genau. Und wieso sollte ich dann Smarty o. ä. benutzen? Da habe ich nur Overhead.[/quote]

Nein. Wenn du das ernst meinst, hat die Diskussion keinen Sinn.
Ansonsten liefert der nächste Absatz einen Ansatz, oder auch nur die Schlagwörter: Cache, verschachtelte Templates,, zentrale Fehlerbehandlung, zentrales Rechtemanagement - die gegen eine simple include Lösung sprechen.
Das soll keineswegs heissen, dass es beispielsweise für ein Gästebuch notwendig wäre eine Template Datei zu lesen, zu analysieren, zu cachen usw.

Quote
Original von dookie
[quote]Original von Michael
Ein weiterer Vorteil von Smary (oder einer anderen sinnvoll konzipierten Templateklasse) ist, dass die komplette Ausgabe gekapselt und vom PHP Code getrennt wird. Im besten Fall sollte im gesamten Code ja nur ein echo/print oder ähnliches stehen, nämlich am Schluss bei der Templateausgabe.

Das habe ich doch auch. Ich muss nur am Ende ein include 'main.tpl.php' oder so machen und das gesamte HTML Zeugs wird ausgegeben.[/quote]

Hast du den Punkt gelesen? Wenn ja hast du ihn nicht verstanden.
Als Hinweis: Man braucht nicht immer das gleiche Template...

dookie dookie am 12.08.06 22:36

Quote
Original von Michael
[quote]Original von dookie
[quote]Original von Michael
Der Vorteil eines Templatesystems ist ja gerade, dass es im Idealfall keine Programmierkenntnisse erfordert.

Das ist aber bei den wenigsten der Fall, denn man muss immer mal mit Schleifen oder if-Abfragen arbeiten, wenn man Templates baut und das ist ja eigentlich auch schon eine Art Programmierung.[/quote]

Deswegen steht dort Idealfall. Weiterhin bezog sich dies eher auf logische Unterschiede. Darüber ob eine IF Schleife Programmieren ist kann man auch sicherlich diskutieren.[/quote]
Man kann auch diskutieren, ob es If-Schleife oder If-Abfrage heißt, wobei ersteres wahrscheinlich weniger Zustimmung bekommen würde.

Quote
Original von Michael
[quote]Original von dookie
[quote]Original von Michael
Wenn du dir deine "Templatedatei" genau anschaust, merkst du auch, dass es quasi nur syntaktische Unterschiede sind. Ob ich nun <?=$content?> oder {content} schreibe ist ja vollkommen egal.

Genau. Und wieso sollte ich dann Smarty o. ä. benutzen? Da habe ich nur Overhead.[/quote]

Nein. Wenn du das ernst meinst, hat die Diskussion keinen Sinn.
Ansonsten liefert der nächste Absatz einen Ansatz, oder auch nur die Schlagwörter: Cache, verschachtelte Templates,, zentrale Fehlerbehandlung, zentrales Rechtemanagement - die gegen eine simple include Lösung sprechen.
Das soll keineswegs heissen, dass es beispielsweise für ein Gästebuch notwendig wäre eine Template Datei zu lesen, zu analysieren, zu cachen usw.[/quote]
Wie ich bereits in einem meinem vorigen Postings schrieb, ist das Caching das einzigste was man mit meiner "Templateengine" nicht so leicht machen könnte. Verschachtelte Templates kann ich aber genausogut ohne Smarty machen, schließlich bietet PHP ja dafür auch ein Sprachkonstrukt an. Die Restlichen Schlagwörter bieten mir keine Anhaltspunkte, welche für eine Templateengine sprechen -- vielleicht kenne ich mich da aber auch nur zu wenig mit Smarty aus.

Quote
Original von Michael
[quote]Original von dookie
[quote]Original von Michael
Ein weiterer Vorteil von Smary (oder einer anderen sinnvoll konzipierten Templateklasse) ist, dass die komplette Ausgabe gekapselt und vom PHP Code getrennt wird. Im besten Fall sollte im gesamten Code ja nur ein echo/print oder ähnliches stehen, nämlich am Schluss bei der Templateausgabe.

Das habe ich doch auch. Ich muss nur am Ende ein include 'main.tpl.php' oder so machen und das gesamte HTML Zeugs wird ausgegeben.[/quote]

Hast du den Punkt gelesen? Wenn ja hast du ihn nicht verstanden.
Als Hinweis: Man braucht nicht immer das gleiche Template...[/quote]
Ja, deswegen sagte ich ja auch "oder ähnliches". Das main.tpl.php war nur ein Beispiel und keine Allzwecklösung.


Ob Templateengine oder HTML-Templates-mit-inline-PHP, Ziel sollte es doch sein, die Programmierlogik von der Designlogik zu trennen und das geht mit beiden Möglichkeiten. Ich jedenfalls finde den Overhead für eine Templateengine in den meisten Fällen zu hoch im Vergleich zu den zusätzlichen Funktionen. Aber das kann jeder entscheiden wie er will.

Dustwolf Dustwolf am 12.08.06 23:20

Der Vorteil eines Templatesystems liegt meiner Meinung nach darin, dass ich ein PHP-Script schreibe und dann sagen kann, welche Platzhalter vorkommen.
Mit so einer Liste ist es dann für jeden mit HTML-Kenntnissen möglich ein Template zu schreiben, ohne PHP-Schleifen oder ähnliches kennen zu müssen.

Michael Michael am 13.08.06 00:33

Quote
Original von dookie
Man kann auch diskutieren, ob es If-Schleife oder If-Abfrage heißt, wobei ersteres wahrscheinlich weniger Zustimmung bekommen würde.


Wohl wahr - sicherlich ist diese sprachliche Ungenauigkeit die Aussage meines Posts

Quote
Original von dookie
Wie ich bereits in einem meinem vorigen Postings schrieb, ist das Caching das einzigste was man mit meiner "Templateengine" nicht so leicht machen könnte. Verschachtelte Templates kann ich aber genausogut ohne Smarty machen, schließlich bietet PHP ja dafür auch ein Sprachkonstrukt an. Die Restlichen Schlagwörter bieten mir keine Anhaltspunkte, welche für eine Templateengine sprechen -- vielleicht kenne ich mich da aber auch nur zu wenig mit Smarty aus


Das war ganz Smarty umspezifisch, viel mehr eine allgemeine Trennung der Ebenen.
Hier ein konkretes Beispiel für die Vorteile - anscheinend ist eine theoretischere Herangehensweise hier nicht sinnvoll:

Bei "deiner" Methoden müssen alle einzusetzenden Variablen im aktuellen Namespace vorhanden sein. Sonst klappt <?=$variable?> ja nicht. Alleine diese Tatsache disqualisifziert diese Möglichkeit schon für Skripte, die über ein 200 Zeilen Gästebuch hinausgehen.
Um komplexe und umfangreiche Anwendungsvariablen (nur ein triviales Beispiel: das Menu) auszugeben müssten diese an eben diese Stelle weitergereicht werden.
Im Grunde macht eine Tempalteengine ja nicht viel mehr: Die einzusetzenden Variablen werden in einer Klasse gesammelt und am Ende mit den Platzhaltern vertauscht.

Quote
Original von dookie
Ja, deswegen sagte ich ja auch "oder ähnliches". Das main.tpl.php war nur ein Beispiel und keine Allzwecklösung.


Das ist ja nicht der Punkt. Wenn du auf deine Weise verschiendene Templates einbindest - und daarum kommst du einfach nicht herum - hast du an verschiedenen Stellen im Skript direkte Ausgaben; das ist im Grunde noch vor ich-arbeite-mit-Funktionen-Programmierniveau.

Quote
Original von dookie
Ob Templateengine oder HTML-Templates-mit-inline-PHP, Ziel sollte es doch sein, die Programmierlogik von der Designlogik zu trennen und das geht mit beiden Möglichkeiten. Ich jedenfalls finde den Overhead für eine Templateengine in den meisten Fällen zu hoch im Vergleich zu den zusätzlichen Funktionen. Aber das kann jeder entscheiden wie er will.


Ich sage nichts gegen Templates mit inline PHP. Aber die Lösung mit direkten Includes ist sehr mäßig.
Über die Vorteile der verschiedenen Methoden ist hier noch nicht geschrieben worden, das hüängt einfach direkt von dem Projekt ab. Eine Template Lösung mit inline PHP ist ja genauso en Templatesystem. Nur sollte man auch dies sinnvoll integrieren und nicht mit direkten Includes.

Neals am 13.08.06 09:50

Was hältst du vom Smarty-Manual?

Ich habe das mal überflogen und nun komme ich recht gut mit Smarty zurecht

Hier das Smarty-Manual

tranver am 13.08.06 16:03

Quote
Original von Michael
...
Wenn du nicht die Funktionsvielfalt von Smarty brauchst ist http://pear.php.net/package/HTML_Template_IT einen Blick wert (gibt es auch ohne nervige PEAR Anbindung) oder erweitert http://pear.php.net/package/HTML_Template_Sigma


hallo,
kannst du vll. mal einen Link schicken? Ich finde das System nur mit PEAR.

Mit freundlichen Grüßen,
tranver.

trefixxx am 18.08.06 18:49

ich wurde von einem freund überzeugt, dookies methode anzuwenden, was ich jetzt wahrscheinlich auch machen werden.
Ich kann nichts mit dme fachgesimpel hier anfangen, deswegen schreib ich hier mal meinef ragen bezüglich der arbeit mit templates hier rein :D

Also momentan sieht die struktur folgendermaßen aus, dass die index.php die logikarbeit macht und die tempaltes footer.tpl.php, header.tpl.php und main.tpl.php zur verfügung stehen.
Ich habe leider noch nicht verstanden, wie ich links gestalte, die ein neues template brauchen.
muss ich dafür ein neues template, meinetwegen artikel.tpl.php, erstellen?
Kann mir da jemand die technik erklären...

Kevz am 18.08.06 22:30

Btw.:
Was er machte war nur ein Beispiel. Ich würde aber an deiner Stelle lieber ein TPL-Sys nutzen. Bereits aus dem Grunde, da man dir bei der Frage anmerkt das du noch nicht viel Ahnung bezüglich der Templates hast. Sollte ich da falsch liegen, so verzeih bitte - aber es kommt in der Frage ziemlich so rüber.

Aber du machst es ziemlich Kompliziert, bzw. es ist sehr Aufwendig wie du es nun im großen und ganzen machen möchtest. :(

trefixxx am 19.08.06 10:12

da liegst du voll und ganz richtig :D
Wieso ist es kompliziert. Smarty arbeitet doch gleichermaßen, oder? Sorry, werde aus dem Manual nicht schlau...

Kevz am 19.08.06 14:18

Scho, aber so wie du es halt machen willst ist es zu Kompliziert wider neuen header etc. zu setzen. D.h. musst du eig. nur die main.tpl.php ändern und dann halt umbennen und den header sowie den footer includen.

trefixxx am 01.09.06 17:18

Ich versuche momentan mit smarty auszukommen, hatte anfangs jedoch planlos das problem, wie ich die templates aufbauen soll.
Ich habe es jetzt so "gelöst"....

index.php
$smarty = new Smarty;

if (isset($_GET['action'])) {
$smarty->assign('template', $_GET['action'].'.tpl');
}
else {
$smarty->assign('template', 'news.tpl');
}

$smarty->display('index.tpl');



index.tpl
<html>
<!-- übriger code... ->
{include file="header.tpl"}
{include file=$template}
{include file="footer.tpl"}



Die links gestalte ich dann bsp. so: index.php?action=article
Klappt schon, aber gibt es vllt. bessere Lösungen? Effizientere?
Ich muss ja nun für jede neue seite (sprich jeden link) ein neues template schreiben.
Sind das nicht unnötig viele dateien oder kommt man nicht drumrum?


2. Frage:
Ich muss ja z.B. alle Schleifen vorformulieren in der php-datei, die ich dann z.B. im template mit {foreach .. } nutze. Ist es sinnvoll, für solche dinge extra php-dateien anzulegen, die ich nachher in die index.php einbinde?

z.B. ein Redaktionssystem: Für alle Befehle, die das aufrufen von artikeln aus der datenbank betreffen, in artikel.php; alle befehle betreffend der bildergalerie in galerie.php etc. und nachher alles in index.php einbinden?

Gibt es da vllt bessere lösungen, den code zu strukturieren? Wobei sollte man aufpassen?

Danke für Hilfe!!

Michael Michael am 01.09.06 19:03

1. Das Templatesystem sollte nicht entscheiden welche Templates in einem Fall geladen werden. Viel sinnvoller einen Rahmen und einen Platzhalter, der im Script mit dem entsprechenden Inhalt ersetzt wird.
Der Rahmen sollte ja nach Umfang natürlich auch strukturiert sein.

Der Idealzustand ist, dass man in einer Situation etwas in der Anzeige ändern will und dafür genau ein Template hat, das man ändern muss.

Konkreteres Beispiel: Du willst, dass vor deiner Navigation nicht mehr Navigation sondern Menu steht. Dann öffnest du das Template navigation.tpl (vielleicht im Verzeichnis include oder so), passt es an und alle Seiten sind geändert.

2. Zu deiner Frage der Codestrukturierung. Ich handhabe es so, dass ich eine index.php habe, in der NUR gehandelt wird welche Methoden aufgerufen werden.
Jeder insich abgeschlossene Bereich ist dabei eine Klasse, die wiederrum eine "index" Datei hat, die weitergehende Dinge regelt.

Beispielsweise (gaaaaanz grob) index.php

if($action=='news') {
$modul = new news();
} else....

print $modul->output();

und in der Klasse news

public function __construct() {
$this->_init();
}
protected function _init() {
$subaction = PARAMETER}
if($subaction=='edit') {
$result = $this->edit();
} else ...

return $resukt;




Wie gesagt nur sehr grob, aber für jedes "Modul" mindestens eine eigene Datei sit in jedem Fall sinnvoll..

Erdo am 01.09.06 19:17

Michael, du hattest doch mal ein Templatesystem für JEX-Oldschool geschrieben bzw da wurde es verwendet. Das fande ich gut und einfach zu bedienen. Gib dem Jungen das doch! ;)

Michael Michael am 01.09.06 19:25

Oh Gott dieses Script sollte ruhen.. ganz tief unter der Erde...

Snake am 01.09.06 20:09

ich hab das ding immernoch im einsatz :D

es ist wirklich extrem leicht zu bedienen. auch wenn die parse methoden fragwürdig sind :)

Erdo am 01.09.06 21:28

Quote
Original von Snake
es ist wirklich extrem leicht zu bedienen. auch wenn die parse methoden fragwürdig sind :)


Für den kleinen Mann reicht's. :D

trefixxx am 07.09.06 20:20

danke, erdo, aber verwende bisher smarty mehr oder weniger erfolgreich...
kleine frage (bezüglich erdos code :) ). Ich verstehe den nämlich nicht so ganz.
Es hakt bei mir an der funktion mktime() und an der query "WHERE FROM_UNIXTIME(datum)>=NOW() ". Wenn ich diese beiden Zeilen entferne verschwindet auch die unten angegebene Fehlermeldung und es wird etwas ausgegeben.

$monat = date("n");
$tag = date("w");
$jahr = date("Y");
$aktuell = mktime(0,0,0,$monat,$tag,$jahr);
$query = "SELECT *
FROM gag_termine
WHERE FROM_UNIXTIME(datum)>=NOW()
ORDER BY datum ASC";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$date[] = $row;
}

$smarty->assign('date', $date);


Notice: Undefined variable: date in C:\Programme\xampp\htdocs\gag_smarty\index.php on line 72

kann mir da jemand helfen?
Also das problem liegt hier ja offensichtlich am phpcode und nicht an smarty....

der_nic der_nic am 07.09.06 20:27

naja dein $date ist nicht definiert... vllt mal vor der Schlaufe $date = array() machen..?
(hab gar nicht gewusst dass php mekert wenn eine Variable den Datentyp ändern?)

trefixxx am 07.09.06 20:42

klappt. aber komisch: folgendes klappt auch und es halt den selben aufbau...
Naja, danke :)

$query = "SELECT *
FROM gag_woche
LIMIT 0,1";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$week[] = $row;
}

$smarty->assign('week', $week);

sili sili am 07.09.06 23:13

Das liegt am Error Handling von PHP. Im ersten Beispiel wird error_reporting() warscheinlich auf E_ALL gestellt, im zweiten nicht. ;)

phore phore am 11.09.06 09:06

hm werde mich in nächster zeit wahrscheinlich auch mit smarty beschäftigen müssen.

michael - zu deinem code beispiel..hast du jetzt in jeder "sub-index" datei eine eigene "output()" function? wie machst du denn grössere ausgaben von zb. news..alles in php?
wo schreibst du allgemeine functions wie solche für bbcode, textoptimierung oder errorausgaben?
und last-but-not-least - hast du für jede nicht-funktions-datei ein .tpl ?
manchmal hat man ja eine seite die nur spezifisch für die webseite sinn macht..zb. bei einen t-shirt label oder so die auflistung der shirts.. macht man da auch eine tpl? bzw. kommt alles aus der db..keine statische texte?

und was spricht dagegen für kleine projekte ein eigenes tpl-system zu schreiben?

sorry für die vielen fragen..haben sich mit der zeit angesammelt :)

danke.

trefixxx am 14.09.06 22:31

eine kleinere weitere frage:
wie impementiere ich eigene funktionen? Ich hab da im netz ein bisschen gesucht, aber leider nur folgendes gefunden (funktioniert natürlich nicht).

$smarty->register_function(func', 'func');
require 'functions/functions.php';


Wie muss ich das richtig machen?
Danke!

Michael Michael am 14.09.06 23:15

Quote
Original von phore
michael - zu deinem code beispiel..hast du jetzt in jeder "sub-index" datei eine eigene "output()" function? wie machst du denn grössere ausgaben von zb. news..alles in php?
wo schreibst du allgemeine functions wie solche für bbcode, textoptimierung oder errorausgaben?


Jaein. Mein Ansatz war/ist es zwei Ebenen zu trennen. Einmal den Programmablauf (also welches Modul, welche Aktion) und die Funktionalität.
Die Ausgaben sollten alle in Templates geschehen. Jede Ausgabe in PHP ist pfui.
Ich bin mir nicht sicher ob ich es besser finde, dass ein Template geöffnet wird und an die Funktion(-sklasse) - also das Modul - übergeben wird oder ob die ensprechende Methode des Moduls das Template öffnet.
Die Ausgabe erfolgt dann über eine einheitliche output Methode, die hauptsächlich den erstellten Inhalte einsetzt und den allgemeinen Rahmen erstellt.
Das ganze ist schwer so kurz und abstrakt wie allgemein zu erläutern... Ich hoffe die Idee wurde ein wenig klarer.
Für allgemeine einzelne Funktionen habe ich eine allgemeine Funktionsklasse. Für BBcode würde ich eine exra Klasse schreiben und die Fehlerbehandlung gehört in keine Funktion sondern direkt in die Ablaufsteuerung.
Idealerweise fragt man ganz am Ende ist ein Fehler aufgetreten? Dann zeige ein Fehlertemplate ansonsten zeige den Inhalte (wobei man den Inhalt beim ersten kritischen Fehler natürlich nicht fertig generieren muss)

Quote
Original von phore
und last-but-not-least - hast du für jede nicht-funktions-datei ein .tpl ?
manchmal hat man ja eine seite die nur spezifisch für die webseite sinn macht..zb. bei einen t-shirt label oder so die auflistung der shirts.. macht man da auch eine tpl? bzw. kommt alles aus der db..keine statische texte?


Hmm das verstehe ich nicht ganz. Man kann das je nach Projekt beliebig tief und differenziert schachteln. Eigentlich teile ich die Seite zu Beginn in ein grobes Raster (header, linke Spalte, Inhalt, rechte Spalte, Footer) und in diesem Groben Raster setzt ich dann weitere Templates ein. Beispielsweise in der linken Spalte die Navigation und im Footer ein Copyright Template.
Das Ziel: so wenig Redundanz wie möglich. Wenn die Navigation "überall" gleich ist, sollte es dafür auch nur ein Template geben. usw

Quote
Original von phore
und was spricht dagegen für kleine projekte ein eigenes tpl-system zu schreiben?
.


Nichts. Es ist quasi der ideale Weg ein auf die Anforderungen zugeschnittenes System zu haben. Allerdings ist es schlicht nicht wirtschaftlich für jedes Projekt das Rad neu zu erfinden.
Das führt zu solch monströsen riesigen System, die mit alle Möglichkeiten geben im endeffekt aber für einfache Sachen fast zuviel können.

// edit

Quote
Original von trefixxx
eine kleinere weitere frage:
wie impementiere ich eigene funktionen? Ich hab da im netz ein bisschen gesucht, aber leider nur folgendes gefunden (funktioniert natürlich nicht).

$smarty->register_function(func', 'func');
require 'functions/functions.php';


Wie muss ich das richtig machen?
Danke!


Gar nicht. Ganz ehrlich, solche Funktionen gehören einfach nicht in das Template sondern in das Script.

phore phore am 15.09.06 10:22

Quote
Original von Michael
Das ganze ist schwer so kurz und abstrakt wie allgemein zu erläutern... Ich hoffe die Idee wurde ein wenig klarer.

jo. hab mich in letzter zeit "zwangsmässig" mit tpl's beschäftigen müssen ;). wird alles langsam klarer.

Quote
Original von Michael
Die Ausgabe erfolgt dann über eine einheitliche output Methode, die hauptsächlich den erstellten Inhalte einsetzt und den allgemeinen Rahmen erstellt.

öhm, hast du evtl. ein beispiel von so ner methode. würde mich mal interessieren was die für parameter haben usw. danke.

Quote
Original von Michael
die Fehlerbehandlung gehört in keine Funktion sondern direkt in die Ablaufsteuerung.
Idealerweise fragt man ganz am Ende ist ein Fehler aufgetreten? Dann zeige ein Fehlertemplate ansonsten zeige den Inhalte

ok.

Quote
Original von Michael
(wobei man den Inhalt beim ersten kritischen Fehler natürlich nicht fertig generieren muss)

wie denn?

Quote
Original von phore
und last-but-not-least - hast du für jede nicht-funktions-datei ein .tpl ?


Quote
Original von Michael
Hmm das verstehe ich nicht ganz. Man kann das je nach Projekt beliebig tief und differenziert schachteln. Eigentlich teile ich die Seite zu Beginn in ein grobes Raster (header, linke Spalte, Inhalt, rechte Spalte, Footer) und in diesem Groben Raster setzt ich dann weitere Templates ein. Beispielsweise in der linken Spalte die Navigation und im Footer ein Copyright Template.
Das Ziel: so wenig Redundanz wie möglich. Wenn die Navigation "überall" gleich ist, sollte es dafür auch nur ein Template geben. usw

ok. aber ich will zb. wenn ich mal zeit habe ein mini-cms schreiben, sodass ich dann für zukünftige "kleine" seiten für kollegen einfach mal schnell das cms nehmen kann. und nehmen wir mal an ich müsste zb. eine seite für das mieten eines auto's machen. dann hätte mein cms ja nicht standardmässig eine seite die fürs "mieten" formular geiegnet wäre. wie baue ich das denn ein? schnell eine neue tpl datei?

hoffe das war jetzt verständlicher.

Quote
Original von Michael
Nichts. Es ist quasi der ideale Weg ein auf die Anforderungen zugeschnittenes System zu haben. Allerdings ist es schlicht nicht wirtschaftlich für jedes Projekt das Rad neu zu erfinden.

gibt es ein gutes tpl-system für kleine seiten? machen tpl's überhaupt bei kleinen seiten sinn?

nochmal danke für deine antworten.
so long

trefixxx am 15.09.06 14:15

du meinst ich soll die function ins php-script einbinden und auch dort verwenden (nicht in dem template)?
Das geht aber nicht, da ich mit einer whileschleife arbeiten muss und ich da doch nicht einzelne variablen mit funktionen versehen kann.

leo am 05.10.06 22:56

guten abend, allerseits!

muss das thema nochmal hochholen...

kennt jemand ein _kleines_ templatesystem, brauche nicht irgendwelche wahnsinnigen sachen wie loops, abfragen usw.

einfaches search & replace.

halt möglichst


    [*]komfortabel
    [*]klein
    [*]schnell
    [*](evtl caching)


ansonsten bin ich auch gern gewillt sowas mir selbst zu basteln, aber ein einfach str_replace kann es ja nich sein...also mir fehlt da ein wenig die fachkompetenz - die reine umsetzung krieg ich denke ich mit etwas hilfe auch hin. also, gefragt sind programm vorschläge und ideen

lieben gruß & gute nacht!
leo.
Michael Michael am 05.10.06 23:03

Hmm IT[X] könnte etwas sein: http://www.ulf-wendel.de/projekte/itx/index.php

Ansonsten zur Umsetzung: Einfaches search & replace ist wirklich nicht mehr als str_replace...
Am besten eine Klasse. Du brauchst eine Methode um eine Datei zu laden (file_get_contents) , eine weitere zum Sammeln von Variablen (beispielsweise add_var oder so) und am Ende eine MEthode für die Ausgabe. Die letzte Funktion ersetzt die Platzhalter (alle gespeicherten Variablen werden mit str_replace ersetzt, übrige Platzhalter mit einem Regex entfernt und alles zurück geliefert)
Man sieht direkt etliche Ansatzpunkte für Erweiterungen und Verbesserungen. Weiterhin war das natürlich nur eine vereinfachte Erklärung und keine sinnvolle Aufteilung

phore phore am 05.10.06 23:28

evtl. hilft dir dieses beispiel weiter [link]

ist halt einfach & so aber wenn du schon php erfahrungen hast wird dir das sicher auf die sprünge helfen.

so long

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt