Webstatt.org - Community seit 2006 - 2012 (2024?)

templatesystem! smarty?

user-333
11.08.2006 22:51

N'abend,

ich möchte eine seite ganz in templates aufbauen (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?

user-220
12.08.2006 09: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.

Avatar user-253
12.08.2006 10: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

Avatar user-166
12.08.2006 11: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'zwinkern;
include 'template.tpl.php';
?>

<!-- template.tpl.php -->
<title><?=$title?></title>
<!-- ... -->
<p><?=$content?></p>
<table>
<?while ($row = mysql_fetch_assoc($sql)verwirrt>
<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.

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]
user-220
12.08.2006 12: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. zwinkern

Avatar user-253
12.08.2006 19: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.

Avatar user-166
12.08.2006 19:40

Original von user-251el
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.

Original von user-251el
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.

Original von user-251el
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.

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]
Avatar user-253
12.08.2006 20:12

Original von user-166
Original von user-251el
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.


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.

Original von user-166
Original von user-251el
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.


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.

Original von user-166
Original von user-251el
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.


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

Avatar user-166
12.08.2006 20:36

Original von user-251el
Original von user-166
Original von user-251el
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.


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.

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

Original von user-251el
Original von user-166
Original von user-251el
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.


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.

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.

Original von user-251el
Original von user-166
Original von user-251el
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.


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

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.

[ » HesaSys - ein freies, schnelles und flexibles WCMS ]
Avatar user-168
12.08.2006 21: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.

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-253
12.08.2006 22:33

Original von user-166
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

Original von user-166
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.

Original von user-166
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.

Original von user-166
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.

user-265
13.08.2006 07: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

user-332
13.08.2006 14:03

Original von user-251el
...
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.

user-333
18.08.2006 16:49

ich wurde von einem freund überzeugt, user-166s 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 Fettes Grinsen

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...

user-220
18.08.2006 20: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. traurig

user-333
19.08.2006 08:12

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

user-220
19.08.2006 12: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.

user-333
01.09.2006 15: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'zwinkern;
}
else {
$smarty->assign('template', 'news.tpl'zwinkern;
}

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



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!!

Avatar user-253
01.09.2006 17: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. user-158n ö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'zwinkern {
$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'zwinkern {
$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..

user-173
01.09.2006 17: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! zwinkern

Abi 2oo7
Avatar user-253
01.09.2006 17:25

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

user-303
01.09.2006 18:09

ich hab das ding immernoch im einsatz Fettes Grinsen

es ist wirklich extrem leicht zu bedienen. auch wenn die parse methoden fragwürdig sind lächeln

user-173
01.09.2006 19:28

Original von user-303
es ist wirklich extrem leicht zu bedienen. auch wenn die parse methoden fragwürdig sind lächeln


Für den kleinen Mann reicht's. Fettes Grinsen

Abi 2oo7
user-333
07.09.2006 18:20

danke, erdo, aber verwende bisher smarty mehr oder weniger erfolgreich...
kleine frage (bezüglich erdos code lächeln ). 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"zwinkern;
$tag = date("w"zwinkern;
$jahr = date("Y"zwinkern;
$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....

Avatar user-162
07.09.2006 18: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?)

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
user-333
07.09.2006 18:42

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

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

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

Avatar user-300
07.09.2006 21:13

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

Avatar user-279
11.09.2006 07: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 lächeln

danke.

user-333
14.09.2006 20: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'zwinkern;
require 'functions/functions.php';


Wie muss ich das richtig machen?
Danke!

Avatar user-253
14.09.2006 21:15

Original von user-279
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? user-158n zeige ein Fehlertemplate ansonsten zeige den Inhalte (wobei man den Inhalt beim ersten kritischen Fehler natürlich nicht fertig generieren muss)

Original von user-279
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

Original von user-279
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

Original von user-333
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'zwinkern;
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.

Avatar user-279
15.09.2006 08:22

Original von user-251el
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 zwinkern. wird alles langsam klarer.

Original von user-251el
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.

Original von user-251el
die Fehlerbehandlung gehört in keine Funktion sondern direkt in die Ablaufsteuerung.
Idealerweise fragt man ganz am Ende ist ein Fehler aufgetreten? user-158n zeige ein Fehlertemplate ansonsten zeige den Inhalte

ok.

Original von user-251el
(wobei man den Inhalt beim ersten kritischen Fehler natürlich nicht fertig generieren muss)

wie denn?

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


Original von user-251el
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.

Original von user-251el
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

user-333
15.09.2006 12: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.

user-228
05.10.2006 20: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.

Avatar user-253
05.10.2006 21: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

Avatar user-279
05.10.2006 21: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