Schrift
[thread]144[/thread]

Templatesystem: ... für ein umfangreiches modul-system



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
eisbeer
 2004-01-12 18:45
#905 #905
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen !

Meine Aufgabe
Ich habe den Auftrag, ein (hauptsächlich) Intranetsystem für
Firmen zu schreiben. Dieses soll um beliebige, ebenfalls in Perl
geschriebene Module erweitert werden.
Zum beispiel eine Adressverwaltung. In diesem Modul sind dann
verschiedene Funktionen vorhanden, stellt euch zum bespiel
vor "Gib Adressen aus", "Speichere neue Adresse", "Lösche
diese Adresse" etc. Aus dieser von der Funktion erstellten DB
sollen dann auch nachinstallierte Module, wie zum Beispiel
"Auftragsverwaltung" zurückgreifen und aufbauen.

Meine Lösung
Bis jetzt habe ich erstmal ein sinnvollen Grundbau geschaffen.
Der basiert auf momentan auf einem soliden Loginsystem und
jetzt habe ich mal diese besagte Modulgeschichte angeschnitten.
Das Hauptscript checkt die Absicht des Benutzers (klassisch
per action-Variable) und schaut in einer mysql-tabelle nach
dieser action, und ruft anhand der in der Tabelle stehenden
Angaben zu diesem Modul eine Funktion auf.

Funktioniert ansich ganz gut.

Mein Problem

Mein Problem: Wie gebe ich es an den Benutzer aus, der in
seinem Büro hockt und eigentlich nur n Adresseintrag hinzu-
fügen will ?

Meine Idee war so: In der DB, wo auch die Informationen zu
der action stehn, gibt es eine Spalte mastertemplate und
eine Spalte slavetemplate.

mastertemplate ist ein Template, indem alles drin steht,
was nicht mit der Ausgabe der action-Funktion zu tun hat.
Also zB einen Header mit Firmenname, eine Uhr, ein Menü, um
zurück zur Modulübersicht zu kommen, und halt alle möglichen
anderen Dinge. Ausserdem beinhaltet es ein Feld, in welches
die Ausgabe der Action-Funktion soll. Es wird von vielen Actions
benutzt.

slavetemplate ist dann natürlich das Template, in das die
action-Funktion ihre Werte einsetzt. Also etwas ganz spezifisches,
sagen wir zum Beispiel ein Eingabeformular für eine neue Adresse.

Bloß wie verwirkliche ich das ? HTML::Template lässt mich zwar
schön Dateien includen, aber es gibt keinen Tag
Code: (dl )
<TMPL_INCLUDE VAR="$spalte_slavetemplate">


Und wenn ich das Mastertemplate selbst öffne und
Code: (dl )
<TMPL_INCLUDE FILE="~~replace_here~~">

~~replace_here~~ selbst ersetze habe ich
1. den Sinn eines Templates "missbraucht"
2. einen komplizierten Umweg gemacht
3. ein Stück code geschrieben, das micht nicht glücklich macht
4. eine ziemlich unflexibele Art, templates zu benutzen

Ausserdem: Angenommen im Mastertemplate gibt es ein Menü,
in dem z.B alle Funktionen eines Modules ("Gib Adressen
aus", "Speichere neue Adresse" etc. pp. ) gelistet sind. Wenn ich
"Gib Adressen aus" gewählt habe, wie markiere ich dann diese
Eintrag im Menü das er ausgewählt erscheint? Steht das auch
irgendwie im slave oder mastertemplate? Wie irgendwie?


Ich hoffe ihr habt mich verstanden.
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
ptk
 2004-01-12 18:48
#906 #906
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nimm Template-Toolkit. Damit kann man Sachen wie
Code: (dl )
[% INCLUDE "langres_${editorlang}" %]

machen.
eisbeer
 2004-01-12 18:56
#907 #907
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Interessant, ich werds mir mal anschaun. Gibt es eine Deutsch Doku ?
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
ptk
 2004-01-12 19:06
#908 #908
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich kenne keine. Die englische Doku findest du unter http://www.template-toolkit.org
eisbeer
 2004-01-12 19:11
#909 #909
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja hab se schon, danke ! Schaut bis jetzt ganz >geil< aus :)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
eisbeer
 2004-01-13 07:37
#910 #910
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Um mir einen Überblick zu schaffen:
Keine weiteren Ideen ?
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
kabel
 2004-01-13 08:02
#911 #911
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
du könntest im master-template die komplette include-anweisung reinkopieren, dann meckert HTML::Template nicht mehr.

master:
Quote
<TMPL_VAR NAME=VARIABLE_INCLUDED_HEADER>


dann die ersetzung:
Quote
VARIABLE_INCLUDED_HEADER -> <TMPL_INCLUDE NAME=SLAVE15>

den output des ersten masters schiebst du in ein skalar, dass du dann einem neuen HTML::Template mittels des scalarref parameters der new() methode.
-- stefan
eisbeer
 2004-01-13 16:59
#912 #912
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mir zu kompliziert, mittlerweile funktioniert ptk's
Variante (fast) perfekt, ist wärmstens zu empfehlen !!!
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
eisbeer
 2004-01-14 19:30
#913 #913
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
ptk, wenn du mich schon drauf hinweist, vielleicht kannst du (oder jemand anders)
mir diese Frage beantworten:

Ich will irgendwie dem Template einen String übergeben, der selbst noch durch den
Templateprozessor gemangelt wird. Also wenn ich diesen Aufruf mache:
Code: (dl )
1
2
3
$string = "Da sah Hänschenklein einen [% tier %] und erschrak sich tierisch...!";

print $Template->process('template.tmpl', { content => $string, tier => 'Baer' });

Wenn ich jetzt aber diesen String in mein Template einsetze wird
das beinhaltete Statement nicht verarbeitet, sondern es wird direkt
ausgegeben. ich bekomme:
Code: (dl )
Da sah Hänschenklein einen [% tier %] und erschrak sich tierisch...!

und nicht
Code: (dl )
Da sah Hänschenklein einen Baer und erschrak sich tierisch...!


Wie mach ich des am dümmsten ?
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
ptk
 2004-01-16 20:16
#914 #914
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du willst also doppelt ersetzen? Es gibt die Moeglichkeit, statt einer Datei einen String als Template anzugeben, ich glaube, indem man den String referenziert. Also so (ungetestet):

Code: (dl )
1
2
3
$string = "Da sah Hänschenklein einen [% tier %] und erschrak sich tierisch...!";
$content = $Template->process(\$string, { tier => 'baer' });
print $Template->process('template.tmpl', { content => $content});
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-01-12 18:45.