WinFuture-Forum.de: [erledigt] Template - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[erledigt] Template


#1 Mitglied ist offline   axx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 03. August 2006 - 12:44

Ich bin mit einem Projekt an einem Punkt, wo der Quelltext durch die Mischung von PHP- und HTML-Code zunehmend unübersichtlich wird.
Ich überlege templates einzusetzen. Ich habe noch nicht mit template-Systemen gearbeitet.

Ich stelle mir folgende Funktionsweise vor:
<!-- versand.tpl -->
	<h3>Versandkosten</h3>
	<p>Wir versenden mit den Paketdiensten DHL und GLS, beide Dienste bieten die Möglichkeit einer Sendungsverfolgung. Innerhalb der Bundesrepublik Deutschland betragen die Versandkosten pauschal {Vorkasse}.<br />
	Ab einem Warenwert von {Frachtfrei} und der Zahlungsart Vorkasse ist der Versand innerhalb der Bundesrepublik Deutschland <strong>kostenlos</strong>.</p>

<?php
	// versand.php
	// $cfgVorkasse und $cfgFrachtfrei werden aus der Konfigurationsdatei bezogen
	$str_template = file_get_contents("tpl/versand.tpl");
	$arr_wildcard = array("{Vorkasse}", "{Frachtfrei}");
	$arr_replace = array($cfgVorkasse, $cfgFrachtfrei);
	print(str_replace($arr_wildcard, $arr_replace, $str_template));
?>


Dabei wird also die ganze Datei versand.tpl in eine Variable gespeichert. Dann werden die in geschweifte Klammern eingschlossenen Inhalte durch Variablen ersetzt, und letztlich der veränderte Text wieder ausgegeben.

Sollte ich mir Sorgen um die Belastung des Servers machen? Ist das eine praktikable Vorgehensweise?

Dieser Beitrag wurde von axx bearbeitet: 04. August 2006 - 17:43

0

Anzeige



#2 Mitglied ist offline   Meatwad 

  • Gruppe: aktive Mitglieder
  • Beiträge: 784
  • Beigetreten: 07. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Bad Vilbel
  • Interessen:Computer, Inliner, Chatten...

geschrieben 03. August 2006 - 17:36

ich kenne keine bessere vorgehensweise. wüsste auch nicht, wie andere templatesysteme das anders machen sollten (habe allerdings noch nie mit einem gearbeitet). serverbelastung ist minimal - weniger als bei einem "normalen" auf php pasierendem script.
I am away to look for my self. If I am back before I return keep me here. | Mein Server
0

#3 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 03. August 2006 - 17:44

Hi,

wenn du die vorgehensweise wünscht, kann ich dir smarty empfehlen (zu finden unter smarty.php.net).

Es bietet eine klare Trennung zwischen PHP und TPL-Dateien. Ebenso bietet es Caching, etliche zusätze wie Modifikatoren für Variablen, relativ einfach erweiterbar und gute Bearbeitung für Variablen.
0

#4 Mitglied ist offline   axx 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 04. August 2006 - 10:04

Ich habe das jetzt mal in einen script umgesetzt. Das Ergebnis überzeugt mich nicht wirklich. An jeder Stelle, wo ich vorher eine Ausgabe hatte, wird jetzt ein template geladen, die Platzhalter ersetzt und das Ergebnis ausgegeben.

Jetzt habe ich zwar kein HTML mehr im php-script, bedingt durch viele Verzweigungen aber eine Vielzahl von HTML-Schnipsel im template-Verzeichnis, manche nicht länger als 2 Zeilen. Im Augenblick sehe ich keinerlei Vorteil, weder von der Übersichtlichkeit noch von der performance her gesehen.

Vielleicht habe ich es aber auch nicht richtig verstanden. Benutzt hier jemand templates?

Mit smarty muss ich mich noch näher beschäftigen, ich bin nicht sicher. ob das für mich das Richtige ist, da ich mit sessions arbeite. Die Grundfunktion von smarty ist aber auch Suchen + Ersetzen, oder?

Edit: Neue Variante, die mir ganz gut gefällt für den Anfang:

Es wird eine template-Datei eingebunden, die alle möglichen Ausgaben enthält. Verschiedene Ausgaben werden mit einem separator, z.B. '{SEPARATOR}' getrennt. Platzhalter werden ersetzt und der neue String mit
explode("{SEPARATOR}", $str_template);
zerlegt.

Jenachdem ob eine Bedingung erfüllt ist oder nicht, wird ein Teilstring ausgegeben oder nicht.

Damit ist die template-Datei ausreichend übersichtlich und das script auch.

Dieser Beitrag wurde von axx bearbeitet: 04. August 2006 - 17:42

0

#5 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 05. August 2006 - 01:49

Smarty hat im Grunde mehrere Schichten und ein Ziel: Eine Trennung zwischen HTML (für den Designer) und dem Programmierer (PHP). Der Programmierer gibt dem Designer dann nur noch eine Liste mit Objekten/Variablen die er auf seinen seiten verwenden kann. Smarty ist nicht nur suchen und ersetzen.

Wenn du einen Crashkurs anschauen willst: http://smarty.php.net/crashcourse.php

Hier siehst du wie Smarty agiert. PHP-Skript wird vom HTML getrennt. Templates können auch Templates laden, was es sehr einfach macht mehrfache Skins für eine Seite zu fertigen.

Ein {$address|escape} liefert sauber kodiertes HTML. Ein {$address|escape:"url"} liefert etwas url-encoded.

Soetwas wie Funktionen wie {html_options} bauen dir mit einzelern ganze Dropdownlisten, Checkbox-Listen, Date-Selektoren etc.

Ein Vorteil schleicht sich aber von hinten an: Die ganzen Templates werden compiliert. Danach können sie in statischen Cache-Dateien gecached werden. Du kannst mit einfachen Befehlen steuern wann der Cache abläuft (z.B. 1 Minute), oder ob du in bei Bedarf einfach neu erstellst. Warum also die Startseite immer neu berechnen, wenn du einfach bei einer Änderung den Cache löschen kannst und die Besucher stattdessen dann immer eine statische Datei bekommen?

Auch ganze Schleifen lassen sich im Template abbilden, mit eine ähnlichen Syntax wie in PHP, nur mit dem Unterschied das PHP die Variablen für Smarty setzt und der Designer dann mit diesen Variablen wieder arbeiten kann.

Sessions sind kein Problem. Generell verarbeitest du Sessions und die Daten die du davon brauchst im PHP. Danach übergibst du es an Smarty und verwendest es dort weiter. Du kannst aber auch direkt in den Templates mit Sessions arbeiten {if $smarty.session.loggedin == true} ... {/if} wäre eine einfache Abfrage im Template selbst ob $_SESSION['loggedin'] === true ist. Je nach Logik gehört es halt entweder ins PHP oder ins Smarty.

Generell ersetzt Smarty nicht nur die Inhalte der Templates sondern kompiliert diese auch. D.h. der Code wird optimiert, alles was nötig ist serialized, in arrays geschrieben, und in in eine spezielle compiled-version gespeichert, bis das Template sich ändert. Danach verarbeitet PHP wie gewohnt die Daten und übermittelt sie an Smarty. Allerdings wird hier nichts mehr ersetzt, da das Template ja schon kompiliert wurde. Smarty setzt nur noch die richtigen Variablen und das Template weiss ja schon wo welche Variable hingehört, ohne bei jedem Aufruf die Template-Datei komplett neu zu analysieren.

Das schöne ist auch die Ausbaubarkeit. Zumal es sehr viele "größere" OpenSource-Projekte gibt die auf Smarty basieren. Um einige Namen zu nennen: bBlog, more.groupware und phpBB.

Dieser Beitrag wurde von Yalamand bearbeitet: 05. August 2006 - 01:57

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0