Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #76  
Alt 09.12.2005, 11:34
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Zitat:
Zitat von LonelyPixel
Johannes, dein Ansatz hat einen entscheidenden Nachteil: Der Anwendungscode enthält Teile der HTML-Struktur. Was machst du jetzt, wenn ich mich entscheide, die Benutzer nicht in einer <table/>-Tabelle darzustellen, sondern mit <div/>s oder gar als <ul/>-Liste? Dann isses vorbei mit der Gestaltungsfreiheit. Die Grenze zwischen Anwendung und Template sollte weder vom Code, noch von der Darstellung abhängen. Oft hängen Templates vom Code ab, hier hängt mal der Code vom Template ab.
Man muss die Tabelle ja nicht als Tabelle ansprechen. Man kann sie auch generell als "Element mit der ID user-table" ansprechen. Im Übrigen denke ich, dass eine so extreme Abstraktion zwischen Anwendung und Präsentation nicht sinnvoll ist. Du produzierst eine Menge Overhead mit unglaublich ausgetüftelten Templateengines nur damit ein Benutzer beispielsweise statt <table> auch <ul> verwenden kann (was in 99% der Fälle sowieso nicht stattfindet). Ich würde keine Templateengine mit mehreren tausend Zeilen Code schreiben nur um in solchen Details eine zusätzliche Abstraktion zu bieten.

Mit der Methode die ich vorgestellt habe findet eine, meiner Meinung nach, ausreichende Schematisierung der Darstellung statt: ich habe ein HTML-Dokument welches einen Body enthält welcher wiederum bestimmte Elemente (einen Usertabelle beispielsweise) die ich von PHP aus ansprechen kann enthält. Wenn ich eine Usertabelle anzeige ist das eine Tabelle, keine Folge von <div> und auch keine Liste (die eh nicht mehrere Spalten unterstützt). Wie diese Tabelle dann dargestellt wird hängt weder von PHP noch HTML ab, das übernehmen Stylesheets.

Zitat:
Ein anderer Anwendungsfall von Template-Scripting ist: Ich will mehrere Links anzeigen, alle mit einem Trennsymbol dazwischen, manche aber optional. Da sollen natürlich keine zwei Trennsymbole in Folge hin. Hier muss also im Template die Darstellung programmiert werden. Genauso könnte ich die Links ja auch als Liste oder alle ganz woanders darstellen, mit einem ordentlichen Templatesystem kein Problem. Hier wäre natürlich keine Behandlung der Trennsymbole notwendig.
Ob ich die Begrenzung einer Schleife mit den <tr>-Tags festlege oder mit zusätzlich eingefügten Scriptinganweisungen macht in der Darstellung keinen Unterschied. Trotzdem ist das ein gutes Beispiel weil es eine Sache verdeutlich. Du sagst: lass mir die Freiheit eine Linkfolge entweder mit manuellen Trennzeichen (| oder - oder ähnliche) oder mit anderen HTML-Tags darzustellen. Ich sage: schreib eine Linkfolge als Liste, die Darstellung wie Trennzeichen, horizontal oder vertikal, kannst du mit CSS machen.

In einem Punkt hast du aber recht: Templatescripting wie if/else-Konstrukte sind in meiner Idee nicht vorgesehen. Vielleicht findet sich da eine Möglichkeit aber soweit habe ich, wie weiter unten erwähnt, noch nicht gedacht.

Ich will nicht sagen, dass grundsätzlichere Änderungen am HTML-Code niemals nötig wären. Was ich sage ist, dass man seine HTML-Templates als eine Art Darstellungsschema verwendet welches von PHP aus ansprechbar und von CSS aus formatierbar ist. Meine Methode ist natürlich nicht "bullet-proof": wenn man das Darstellungsschema grundsätzlich ändern will hat man bei meiner Methode ein Problem da man eventuell auch in den Anwendungscode angreifen müsste. Vielleicht kann man das auch umgehen aber soweit hab ich noch nicht gedacht, das war eher eine spontane Idee

In den meisten Fällen ist so eine grundlegende Änderung nicht nötig. Wer schreibt die Templates eines Forums oder Wikis grundsätzlich um? Die meisten passen Farben und Hintergrundbilder, vielleicht die Reihenfolge von Elementen, an aber keine grundsätzlichen Änderungen am HTML.

Man könnte auch soweit gehen und generell auf Templates verzichten. Solange deine Anwendung ordentliches HTML auswirft lassen sich die meisten Designänderungen mit Stylesheets machen.

Zitat:
Was spricht für mich persönlich gegen Smarty:
Mein eigenes System ist mindestens doppelt so schnell und die Codegröße ist weit weniger als die Hälfte (müsste nachschauen). Den Umfang von Smarty hab ich gar nicht komplett erfasst, das Ding kann jedenfalls viel zu viel für den Zweck für den es existieren sollte.
Ein guter Punkt wenn man speziell gegen Smarty argumentiert: das Ding ist absolut überdimensioniert. Im Grunde ist es schon fast eine eigene Programmiersprache.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #77  
Alt 09.12.2005, 12:14
Benutzerbild von LonelyPixel
UNB-Entwickler
 
Registriert seit: 01.2004
Ort: Erlangen
Beiträge: 974
Sind ja auch nur knapp über tausend Zeilen.

Zu deiner Tabelle: abwechselnde Zeilenhintergründe. Sowas geht mit CSS? (Falls ja: sowas geht mit dem heute unterstützten CSS?)

Trennsymbole mit CSS? Selbe Frage wie oben.

__________________
Yves Goergen
Softwareentwicklung, Fotografie, Webhosting, UNB Components (in Arbeit)
  #78  
Alt 09.12.2005, 17:36
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Solche Dinge sind mit meiner bisherigen Methode eher schwierig zu machen, ja. War ja auch nur eine Idee, wie man sich für die grundlegenden Sachen wie Platzhalter, Schleifen usw. eine umständliche Scriptingsyntax sparen könnte. Die meisten Scriptinganweisungen dienen nur als Markierungen für die Templateengine damit sie weiss wo ihre Daten hingehören. Das kann man sich auch sparen indem man direkt das HTML manipuliert.

Man könnte aber auch bei meiner Idee Scripting (optional) anbieten. Ich hab in meinem ersten Beitrag typo3 erwähnt. Dabei habe ich mich auf die Template-Autoparser-Erweiterung bezogen die im Manual unter "Modern Template Building" beschrieben wird. Dabei können HTML-Templates direkt manipuliert werden. Die Manipulation läuft dabei über eine einfache Scriptsprache (die seperat vom Template definiert wird) mit der dann auch Dinge wie wechselnde Zeilenhintergründe (oder andere HTML-Tags für ein Element) realisierbar sind.

Find ich zwar für die meisten Zwecke einfach zuviel des Guten aber wenn es gewünscht wird kann man Scripting ja seperat anbieten ... Das hat nämlich den charmanten Vorteil, dass Designer sich nur um ihren HTML-Code kümmern müssen. Kein Gedanke an Templatescripting, Anwendungslogik u.ä. Diese Dinge macht die Anwendung selber bzw. lassen sich über Scripting konfigurieren.

__________________
Johannes Klose
Calitrix Wiki - Wiki auf Basis von PHP und MySQL
  #79  
Alt 18.12.2005, 13:25
neues Mitglied
 
Registriert seit: 11.2005
Beiträge: 2
Hi Fabchen!
Hast du vielleicht noch dein Templateparser in der Version 1.03?
Ich habe zwar mittlerweile eine eigene Templateklasse, bin aber überzeugt dass es noch das ein oder andere daran zu verbessern gäbe...!
Danke!
Gruß Felix

  #80  
Alt 07.01.2006, 16:06
Mitglied
 
Registriert seit: 01.2005
Beiträge: 14
Zitat:
Find ich zwar für die meisten Zwecke einfach zuviel des Guten aber wenn es gewünscht wird kann man Scripting ja seperat anbieten ... Das hat nämlich den charmanten Vorteil, dass Designer sich nur um ihren HTML-Code kümmern müssen. Kein Gedanke an Templatescripting, Anwendungslogik u.ä. Diese Dinge macht die Anwendung selber bzw. lassen sich über Scripting konfigurieren.
Sehe ich mittlerweile auch so. Nach einigem Rumprobieren bin ich von der obigen Idee auch wieder abgekommen (Bäumchen wechsle dich ). Oder sagen wir so: Man sollte die Anwendungsfälle berücksichtigen. Wenn ich eine in sich gekapselte Applikation schreibe (bspw. ein Datenbankfrontend für irgendwas), so komme ich damit sehr weit, viel weiter, als wenn ich erst mit groben Templategewurschtel hantieren müsste.

Schreibe ich allerdings eine größere Applikation, in der mehrere End-Anwender wiederum Styles meiner Seiten manipulieren können, so bietet sich eine Templatemaschine wiederum an, v.a. unter dem Gesichtspunkt, dass man Platzhalter auf mehrere Arten und Weisen interpretieren kann (so kann zB eine Blockmarkierung im Frontend durch ein bestimmtes Modul - welches wiederum hart kodiert ist - und im Backend eben durch ein Formular zur Auswahl ebenjener Module ersetzt werden).

Trotdem gehe ich nicht davon ab, dass die "üblichen" Templatesprachen meist genausoviel Logik in die Templates übertragen, als würde man es hart als PHP/ASP/whatever-Seite schreiben. Klar - ein Mindestmaß an Kontrollen sind sicherlich nötig (siehe das Beispiel bzgl alternierender Zeilenhintergründe), doch sollte man diese durch "gewöhnliche" for...if...else...endfor Konstruktionen abbilden?

Wie einer meiner Vorredner bereits sagte, lässt sich dies viel eleganter verpacken. Ich suche im Augenblick nach Möglichkeiten, solch häufig wiederkehrende Aufgaben auf möglichst einfache Tags zu übertragen. Ein Beispiel: Wie ist eine (hierarchische) Navigation mit Smarty darstellbar? Ist schon recht aufwendig, stelle ich mir vor, und lässt sicherlich für mehrere Menuebenen ne Menge Schrott in den Templates. Es SEI denn, man verfolgt den Ansatz, dass man das Menu hart codiert, und die HTML-Ausgabe auf einen Template-Platzhalter bindet. Ist aber recht unflexibel.

Ich hatte nun folgende Idee (die auch ganz gut funzt, aber sicher noch Erweiterungsfähig ist):

Ein gut lesbares Template, welches einen schönen Kompromiss zwiscehn Usability und "Mächtigkeit"/Funktionalität bietet, kann folgendermaßen aussehen:

Code:
<ul>
  <tpl:menu>
    <tpl:on>
        <il><tpl:a/>
          <ul>
            <tpl:menu>
              <tpl:on><li><tpl:a/></li>
              <tpl:off><li><tpl:a/></li>
            </tpl:menu>
          </ul>
        </li>
      </tpl:on>
      <tpl:off><li><tpl:a/></li></tpl:off>  
  </tpl:menu>
</ul>
Die Idee ist also, soviel Logik wie möglich in die Software zu übertragen, dem User gleichzeitig aber Mittel zur Verfügung zu stellen, diese Logik durch das Template manipulierbar abzubilden. Im Gegensatz zum Klassischen Ansatz, dem Template nur Daten zur Verfügung zu stellen, die durch die Logik generiert werden, wodurch im Template selbst wiederum sehr viel Rechnerei zur Auswertung der Daten anfällt (bspw. [rekursives?] Durchwandern eines Arrays/von Objekteigenschaften, um mehrere Verschachtelte Navigationsebenen aus ner Datenbank etc. darzustellen).

Was denkt ihr?

  #81  
Alt 23.01.2006, 16:17
Mitglied
 
Registriert seit: 01.2005
Beiträge: 137
Wie sieht es eigentlich mit den Geschwindigkeiten aus?

- Gemischt (php und html)
- reiner php-Code
- html-Code in den die eigentlichen Daten per preg_replace eingefügt werden

Was ist schneller?
Ich denke mal das 3. ist langsamer, da ein replace doch recht "lange" dauern würde...
Dann bleibt noch der Vergleich von Punkt 1 und 2:
Was ist schneller? php-Code mittels php-Tags in html-Dateien einbinden oder das komplette Dokument als php verarbeiten?
Es geht nicht unbedingt darum gemischte oder reine php-Templates zu machen, sondern eher die Templates durch einen Parser in entsprechenden Code zu wandeln.
Wenn man eine Cache-Funktion verwenden will, ist es sinnvoll nicht in html-Code zu parsen, da dieser dann ja wieder aktualisiert werden müsste...

Seh ich das richtigß Und was ist euch zu Geschwindigkeitsunterschieden (php-Code oder "Misch-Code") bekannt?

  #82  
Alt 23.01.2006, 17:13
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Wenn mich nicht alles täuscht, dann ist PHP-Code, der HTML via echo ausgibt, noch am schnellsten. Allerdings würde ich davon abraten. Programmierung ist mehr als nur Performance-Optimierung und die Nachteile dieser Variante sind überwiegend (niedrige Lesbarkeit, schlechte Wartbarkeit, etc.).

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #83  
Alt 23.01.2006, 17:20
Mitglied
 
Registriert seit: 01.2005
Beiträge: 137
Deshalb wird für die Les- und Wartbarkeit ein HTML-Template mit Template-Tags erstellt. Dieses wird dann geparst und, wenn gewünscht, gecached. Somit kann man die großteils html-Datei bearbeiten und dann wird das ganze in php gewandelt, damit es schnell und einfach ausgegeben werden kann

Antwort


Stichworte
-


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Smarty Template Engine Jan Stöver Programmierung und Datenbanken 2 10.05.2004 00:02
IPB2.0: Generalüberholung des Skin und Template Managers Michael Przybyla Forensoftware 7 24.01.2004 15:56
Erweiterte User Class fabian Programmierung und Datenbanken 3 26.08.2003 21:15






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25