| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
|
| Nach oben |
|
 |
thewuz Erfahrener Benutzer
Anmeldedatum: 21.01.2007 Beiträge: 228 Wohnort: Nähe Wien Programmiersprachen: PHP, HTML, JAVA, JavaScript Compiler: Eclipse für JAVA
|
Verfasst am: 14.08.2007, 21:23 Titel: |
|
|
hm, hab keine lust mich durch meterweise code zu wühlen
könntest du vll die vor- und eventuellige nachteile aufzählen?
mfg
thewuz
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 15.08.2007, 13:28 Titel: |
|
|
Hm, naja Vor- Nachteile in Bezug auf was? =)
Allgemein:
- Dateien müssen eingelesen werden, jedes mal von neuem
- Variablen oder Blöcke müssen mit Hilfe regulärer Ausdrücke ersetzt werden
=> Performance-lastig
+ Templates kann man initiieren, wieder löschen während dem ganzen Code bis hin zum parsen
+ Variablen kann man den ganzen Code über hinzufügen / löschen / ändern
+ Man kann Blöcke festlegen, die auch ineinander schachtelbar sind
+ Man kann Templates alleine parsen
+ Dateien werden erst eingelesen und fertig gemacht, wenn die Methode parse() aufgerufen wird. Vorher kann man jederzeit Headers senden ohne Performance-Verluste zu haben
Der Vorteil gegenüber der ersten Version ist eben vor allem, dass man eine Instanz erstellt und während dem Code eben festlegt, was man wo wie will und erst wenn man das Ende seines Codes erreicht, kann man sagen, ob man alles parsen will (dann erst werden die Dateien eingelesen), ob man nur einzelne Templates parsen will oder ob man lieber einen Header-Redirect machen will, ohne Performancelust durch Einlesen der Dateien am Anfang zu haben.
Des Weiteren ist die neue Innovation in dieser Version, dass Blöcke ineinander schachtelbar sind, d.h. man kann einen äußeren Block haben, der folgendermaßen aussieht:
| Code: |
{% table %}<table>
</table>{% table %} |
Dieser Block beinhaltet nur die primären Tags einer Tabelle. Nun folgt ein innerer Block, weil wir mehrere Reihen haben wollen mit Hilfe von <tr></tr>:
| Code: |
{% table %}<table>
{% tr %}<tr>
</tr>{% tr %}
</table>{% table %} |
Schließlich folgt der dritte Block, der die <td>-Tags beinhaltet:
| Code: |
{% table %}<table>
{% tr %}<tr>
{% td %}<td>{%td.content%}</td>{% td %}
</tr>{% tr %}
</table>{% table %} |
Ein Block ist also immer {% block %} ... {% block %}. Innerhalb eines Blocks sind die Variablen so gekennzeichnet: {%block.var%}. Außerhalb eines Blockes so: {%var%}
Ein Block muss in einem Aufruf erfolgen, weil alle inneren Blöcke mit einem Mal mitgeparsed werden müssen. Den Block kann man auch nicht mehr entfernen danach:
| Code: |
assign_block('table', array('info' => 'style="border: 1px solid black;"',
'tr' => array()); |
'tr' wird ein Array zugeordnet, das nun ein numerisches (!) Array ist. Daran erkennt der Parser, dass ein innerer Block vorhanden ist. In diesem numerischen Array befinden sich numerische Werte, die wiederum Arrays zugeordnet bekommen. Jeder dieser Werte stellt einen neuen Block mit dem Namen 'tr' dar:
| Code: |
array(
[0] => array(
'info' => '',
'td' => array()
)
[1] => array(
'info' => '',
'td' => array()
)
) |
Damit haben wir zwei neue tr-Blöcke innerhalb von table festgelegt. Man findet unter 'td' wiederum jeweils ein Array. Beide sind wieder numerisch und enthalten als Werte wieder Arrays, die die td-Blöcke festlegen. Nacher kann die Tabelle beliebig groß werden, das Template bleibt weiterhin klein.
Hoffe es war verständlich, beim Download gibt es auch eine knappe Beschreibung von all dem.
lG
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
synapsis Administrator

Anmeldedatum: 15.10.2006 Beiträge: 385 Wohnort: Nahe München Programmiersprachen: C/C++, VB, (Java), php, JS, AJAX, (Python) Compiler: MS VS2005 SE
|
Verfasst am: 16.08.2007, 10:18 Titel: |
|
|
So, hatte erst jetzt Zeit mir das mal anzuschauen. Im Prinzip hast du die Template-Engine von phpbb verbessert. Zum einen sind Blocks innerhalb von Blocks natürlich eine feine Sache und zum anderen ist der Code einfacher zu schreiben. (keine BEGIN .... , usw) Natürlich entsteht dadurch auch ein Nachteil, weil die Lesbarkeit der Templatedateien abnimmt. (nicht mehr so übersichtlich)
Das Einsetzen von Variablen in Blöcke scheint intuitiver als bei phpbb.
So gesehen, versuch mal den Entwicklern von phpbb für die version 3 deine neue Engine anzudrehen! (wobeis schon recht spät ist, die sind ja schon bei RC4)
(zu den Tools verschoben)
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 16.08.2007, 11:52 Titel: |
|
|
Das Prinzip ist von phpBB -zum Teil- abgeschaut, wie bei meiner ersten Version mal erwähnt, ja.
Aber
1. kenne ich ne Menge Leute, die mit str_replace und derlei ihre Templateengines in einfacher Weise selber schreiben, also kommt die Idee selber nicht von phpBB
2. ist meine TemplateEngine nicht nur umfangreicher, sondern auch vom Prinzip nochmal etwas komplexer:
- Template-Dateien werden als Namen in einer Variable gespeichert
- Variablen werden als Array var => value gespeichert
- Blöcke werden als mehrdimensionale Arrays gespeichert
- bis auf Blöcke kann man jederzeit Variablen oder Templates entfernen (ändern)
- erst am Ende der Datei, wenn kein Redirect gekommen ist oder sonst etwas, werden die Dateien eingelesen und verarbeitet
phpBB macht das nochmal anders.. und ich glaube die haben da irgwelche Variablen, die "compiled_code" und "uncompiled_code" heißen. Hab mich da nie eingearbeitet, aber ich glaube die machen da auch irgwas, das die Effizienz etwas steigert.. ma sehn, ob man noch was abschauen kann^^
Also abgeguckt ist nur die Idee der Blocks eben.. die hab ich dann erweitert
Ansonsten danke für das Lob.. wenn jmd Bugs findet, bitte melden! Wäre sehr angetan.
lG
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 20.01.2008, 12:20 Titel: T-REx 2.2.0beta |
|
|
Damit auch alle über meinen Stand der Dinge Bescheid wissen..
T-REx 2.2.0 ist in der Beta-Phase
Durch langes Programmieren gestern habe ich es endlich geschafft ein neues Block-System zu entwickeln. Blöcke sind jetzt nicht mehr nur Arrays, sondern eigene Klasseninstanzen. Das ermöglicht einen übersichtlicheren Zugriff und zugleich kann man Einstellungen jederzeit editieren.
Was sich in der Version 2.2.0 geändert hat / ändern wird
Übersicht
- eigene Blockklasse
- sog. virtuelle Templates
- Konfigurationen von Ordner, eigene Compilerfunktion, eigenen Errorhandler
- Anordnung von Templates in Gruppen (sog. "Keys")
- DebugMode
Was noch nicht dabei ist, mir aber fehlt, ist die Möglichkeit einer Variable ein neues Template zuzuweisen, das auch geparsed wird. Bisher muss man dafür eine neue T-REx-Klasse instanzieren, diese dann kompilieren lassen und der ersten T-REx-Klasse übergeben. Das soll sich ändern, indem die obere Templateklasse auch auf innere Templates eingeht
Der Stil von 2.2.0 ist immer noch der 2er-Reihe sehr ähnlich: Erst Konfiguration, dann Kompilierung. Das war der Grund, wodurch es sich von der 1er-Version (sofortige Kompilierung) unterschieden hat. Da sich dieses Prinzip nicht geändert hat, bleibt die neue Version als solche erhalten und nicht als neue Reihe, auch wenn es extrem viele Neuheiten gegenüber den alten Updates gibt. Das wird auch der Grund sein, warum es vor allem in der Beta-Phase noch viele Bugs geben wird (bisher habe ich bis auf fehlenden Features keinen gefunden), aber ich hoffe auf Stabilität.
Eine richtige Dokumentation wird folgen, sobald die Betatests zu Ende sind und das System stabil läuft. Die Debugger-Funktion gibt übrigens auch Informationen zur Kompilierungszeit aus, was sehr interessant sein könnte.
Man findet T-REx im Repository: https://www.syncom.org/svn/trex/
Viel Spaß beim Testen
Gruß
EDIT: knappe 1000 Zeilen Code
PS: Vernichtet smarty! *wuahaha*
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
thewuz Erfahrener Benutzer
Anmeldedatum: 21.01.2007 Beiträge: 228 Wohnort: Nähe Wien Programmiersprachen: PHP, HTML, JAVA, JavaScript Compiler: Eclipse für JAVA
|
Verfasst am: 20.01.2008, 20:50 Titel: |
|
|
also so wie sich das anhört, dann kann sich deine Engine auf jeden Fall mit bekannten Template Engines wie eben genannter "Smarty" messen.
Mach weiter so, und vor Allem: Mach Publik daraus!
lg
thewuz
|
|
| Nach oben |
|
 |
synapsis Administrator

Anmeldedatum: 15.10.2006 Beiträge: 385 Wohnort: Nahe München Programmiersprachen: C/C++, VB, (Java), php, JS, AJAX, (Python) Compiler: MS VS2005 SE
|
Verfasst am: 20.01.2008, 21:13 Titel: |
|
|
hört sich kompliziert an
gute Arbeit
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 21.01.2008, 21:22 Titel: |
|
|
Kompliziert? Ich dachte es wäre einfacher geworden
Nene, ist halt wirklich im Moment in der Beta. Nächste Woche fang ich mit Probeläufen an vorhandenen Websites auf meinem localhost an - es hat sich herausgestellt, dass ich da meistens 90% aller Fehler entdecke, so wirklich welche existieren sollten. Habe aber schon einige Dinge entdeckt, die noch nicht so schön laufen. Außerdem fehlen noch einige Rückgabefunktionen, die zackig geschrieben sind..
Aaaaaber dann^^ Dann wirdsn neuen Post hier geben.. und in einigen anderen Foren.. und meine Website wird erscheinen *freu*
Wartet nur, wird alles gaaaanz klasse
lG
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
synapsis Administrator

Anmeldedatum: 15.10.2006 Beiträge: 385 Wohnort: Nahe München Programmiersprachen: C/C++, VB, (Java), php, JS, AJAX, (Python) Compiler: MS VS2005 SE
|
Verfasst am: 21.01.2008, 22:16 Titel: |
|
|
Es wär sehr interessant zu wissen, wie denn die Performance von deiner Engine aussieht. Kannst du da mal eine Testreihe machen? Mit microtime() solltest du da eigentlich zurechtkommen...
Ideal wär's natürlich dann, wenn du die Performance auch bei anderen Engines (z.b. der phpbb engine oder smarty) misst und die dann vergleichst.
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 21.01.2008, 22:25 Titel: |
|
|
| synapsis hat Folgendes geschrieben: |
Ideal wär's natürlich dann, wenn du die Performance auch bei anderen Engines (z.b. der phpbb engine oder smarty) misst und die dann vergleichst.  |
Das hatte ich natürlich vor Kommt noch vor dem Release!
Der oben genannte "DebugMode", gibt die bereits die Zeit aus, die er von Start der Templateklasse bis zum Ende des Parsen braucht
Was nun noch fehlt sind natürlich vergleiche. Diese werde ich dann auch auf der Website vorführen, um ein Grund für meine TE anzubringen
Bisher liegt sie bei einigen wenigen Ausgaben (kurze texte, zwei tabellen) bei unter 0.001 Sekunden, wobei sie beim ersten Aufruf knapp drüber liegt und danach natürlich (php eigener auto cache womöglich) drunter. Wie das mit längeren Texten und v.a. Websites aussieht, weiß ich noch nicht. Bisher war T-REx 2.1 aber stets bei rund 0.05-0.4sek samt MySQL-Abfragen und allem halt
lG
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 22.01.2008, 00:33 Titel: |
|
|
Hört sich interessant an - vielleicht könnte ich das sogar gebrauchen bei meiner Seite
Ich habe den Inhalt nur so kurz überflogen - werde ihn später nochmals lesen und vielleicht auch eine Testreihe durchführen, benutze derzeit Smarty
Meine Frage vorweg:
Ist es möglich, einzelne Templateblöcke zu erzeugen - sprich, ein Templateblock Header, einen Block Menü, einen Block Inhalt, einen Block zuatzmenü, einen Block Footer...
Also alles unabhängige Blöcke zusammenstellen, innerhalb eines Durchlaufs ohne Komplikationen?
Ob das bei Smarty geht, weiss ich nicht, da wird ja alles in einer Klasse behandelt und wenn eine Ausgabe erzeugt wird, werden weiss ich was für Codeschnipsel erstellt, die dann irgendwo liegen und ob dann nachträglich eine weitere Ausgabe erzeugt werden kann, ist fraglich.
Würde mich nur mal so interessieren, wie das hier so ist.
(Kann sein, dass ich in deisem Bereich ein Vollnoob bin *g* - aber ich hoffe,du hast mein Anliegen verstanden *fg*)
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 22.01.2008, 19:05 Titel: |
|
|
Hi,
okay, nochmals zur Info: Das ist momentan Beta. Ich habe bereits die ersten Bugs in den Blöcken gefunden
Zu deiner Frage:
Uff, ganz verstehe ich nicht, was du meinst.
Normalerweise (ich als Ersteller des Scripts), würde es folgendermaßen verwenden: Eine header.tpl, content.tpl (wahlweise je nach Datei) und eine footer.tpl. Diese werden dann per assign_tpl(); jeweils eingefügt (in der richtigen Reihenfolge versteht sich. Eine Verschiebungsfunktion wird evtl noch kommen..).
Blöcke sehen folgendermaßen aus:
{% block %}<div>{%block.content%}</div>
{% block%}
Diesen Abschnitt kann man jetzt beliebig oft mit beliebigem Inhalt generieren lassen Das Ganze ist auch verschachtelbar, aber da tritt in der neuen Version im Moment ein winziges Buglein auf.. mhm^^
Ich weiß nicht, ob man diese Klasse bereits mit Smarty vergleichen kann - immerhin unterscheiden sich die Prinzipien sehr stark von einander. Klar ist, dass Smarty zu Beginn weit aus langsamer sein wird, aber sobald der Smarty-Code in php verwandelt wurde, ist dies natürlich schneller als T-REx. T-REx hat dagegen hohe Flexibilität innerhalb von php. Auf was ich Augenmerk lege: Design wird vom Code getrennt. Das ist in meinen Augen bei Smarty nicht geschehen, da der Smarty-Code völliger Stuss ist. Beispiel:
Es gibt eine Variable innerhalb eines Templates. Die Variable hat den Namen "myVar". Nun möchte ich, wenn der Parameter $_GET['site'] gleich 'index' ist einen bestimmten Content ausgeben; im Falle 'news' einen anderen und bei nicht vorhandenem Parameter eine Fehlermeldung. In Smarty ist es meines Wissens möglich dies mit einer if-Bedingung im Template zu machen. Alá "{smarty: if..}" (Achtung: dieser Code stimmt nicht mit der Smarty-Syntax überein, sondern gibt nur ein Beispiel!). Damit gibt es für mich persönlich aber schon ein Problem: Wieso darf das Template entscheiden, welcher -Inhalt- wann und wo stehen darf? Das heißt, man muss drei Dinge unterscheiden: Design (Templates = Vorlagen), Code und Inhalt. Inhalt steht erwiesenermaßen am besten in der Datenbank oder in ausgelagerten Dateien (z.B. XML ist sehr gut besonders für eine Sprachweiche geeignet). Der Code dient dazu all dies zusammenzuführen, egal welches Design, egal welchen Inhalt. Also sollte im php-Code stehen:
switch($_GET['site']){
case "": [..]
default: [..]
}
Smarty nutzt diese Syntax, um einen php-Code zu generieren. Für viele sicher eine Erleichterung, für mich aber nicht mit dem Sinn er TemplateEngine konform. Eine ausreichende Dokumentation erscheint am Wochenende
lG
_________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 24.01.2008, 20:15 Titel: |
|
|
In Smarty wird ein Template aufgerufen - entsprechend den übergebenen Variablen, kann ermittelt werden, welcher Teil angezeigt wird:
| Code: |
| {if isset($username)}Willkommen {$username}{else}Willkommen Gast{/if} |
Code-Beispiel für Anzeige einer Willkommensmeldung...
Ebenfalls ist es möglich weitere Templates im Template zu includen:
| Code: |
| {include file=./header.tpl} |
Weiter ist es möglich, eine Schleife einzubauen, um eine Liste entsprechend auszugeben:
| Code: |
{foreach key=id item=inhalt from=$array}
Nummer: {$id} - Inhalt: {$inhalt}<br>
{/foreach} |
Von dem her gesehen find ich Smarty praktisch - nur passiert alles über eine Templateinitialisierung... also alles muss über ein Template aufgerufen werden.
Wäre natürlich praktisch, wenn man ein Conteiner-Template machen könnte, wo mann dann die einzelnen Bereiche (Menu, Banner, Content, etc.) getrennt laden kann - wiederum Templates innerhalb eines Templates generieren, je nach Aufruf.
Ich hätte halt gerne aus PHP gesteuert, wann ein Template an welcher stelle ausgegeben werden soll - bei Smarty muss ich das alles im voraus Planen, da wie gesagt, alles über die Templates aufgerufen wird.
Meine Idee:
Die Templates für den Content durchgehen und dann anschliessen noch ein weiteres Template für den Content durchgehen, getrennt vom ersten, sollen aber beide im Content angezeigt werden...
(Klingt wohl jetzt kompliziert, ich hab selber noch nicht den richtigen Lösungsweg, aber ansatzweise die Idee, wie ich es machen könnte, das aber wohl nicht mit Smarty)
|
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 24.01.2008, 20:22 Titel: |
|
|
Kleiner Nachtrag... vielleicht aber schon bekannt?
| synapsis hat Folgendes geschrieben: |
| Es wär sehr interessant zu wissen, wie denn die Performance von deiner Engine aussieht. Kannst du da mal eine Testreihe machen? Mit microtime() solltest du da eigentlich zurechtkommen... |
| PhP0Kid hat Folgendes geschrieben: |
| Bisher liegt sie bei einigen wenigen Ausgaben (kurze texte, zwei tabellen) bei unter 0.001 Sekunden, wobei sie beim ersten Aufruf knapp drüber liegt und danach natürlich (php eigener auto cache womöglich) drunter. |
Bitte beachtet, dass der erste Aufruf von microtime() in PHP nicht immer gleich korrekte Werte liefert.
Ich habe selber einige Testreihen durchgeführt und bemerkt, dass die Werte um ein Echo auszugeben unterschiedlich lange dauern, wenn microtime() nicht zum voraus einmal aufgerufen wurde, danach dauerte eine Echo-Ausgabe gleichmässig lange!
|
|
| Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Anhänge in diesem Forum nicht anhängen. Du kannst Dateien in diesem Forum herunterladen.
|
|