1 2 3 4 5 6 7 8 9 10 11 12
#!/usr/bin/perl # CGI-Script mit Template ########################################################################### use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); # Für den Entwickler my $u = MyCGI::Einmaleins->new; print $u->header, $u->response; # Ende CGI-Script
1
2
3
<h3><!--EVENT::pegel:get_pegel -->
<span class="pegel-pegel">Pegel: __pegel.pegel__ </span><span class="pegel-datum">Zeit: __pegel.datum__ __pegel.zeit__ </span>
<!--/--></h3>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my %HandlerHash =
(
"get_pegel" =>
{
'handler' => sub { $Self->getPegel_handler( @_ ); },
'mods' => { 'url' => 'http://www.steb-koeln.de/hochwasser.html',
'uaname' => 'EP-Bot www.ebertplatz.de',
'regex' => qr{\<div\s+?class="pegelbox"\>\s*?\<h3\>.+?\<\/h3\>\s*?\<h4\>(.+?)\<\/h4\>\s*?\<p\>\s*?\<span\>am:(.+?)\<\/span\>\s*?\<span\>um:(.+?)\<\/span\>},
},
},
);
# Mische mit dem vererbten Hash
$Self->mergeHandler( \%HandlerHash, $Self->{'HandlerHash'} );
# registriere das Objekt als Eventhandler
$SC::EVENTS->registerHandler( $Self->{'NICKsite'}, $Self->{'NICKinstance'}, $Self );
RewriteRule ^(.*)$ /cgi-bin/meincms.pl/$1?&%{QUERY_STRING} [L]
2011-08-12T09:18:28 pq[rollen]
das klingt, als hätte mir beim programmieren des rollensystems hier jemand über die schulter geschaut =)
2011-08-12T09:18:28 pq[rollen]
das klingt, als hätte mir beim programmieren des rollensystems hier jemand über die schulter geschaut =)
2011-08-11T18:16:41 pqdas templating gefällt mir gar nicht. ist vermutlich sehr aufwendig zu warten, da man im template nur %s stehen hat und im code nach der reihenfolge schauen muss.
1
2
3
4
5
6
7
8
9
10
11
12
$Self->{'MetaHash'} =
{ $Self->{'NICKtab'} =>
{
"id" =>
{
'_isindex_' => 'true',
'_noinsert_' => 'true',
'_noupdate_' => 'true',
'length' => 32,
'_select_' => " _tabfield_ ",
},
....
2011-08-11T18:16:41 pq...wenn dann würde ich gleich mit einem fertigen template-system arbeiten.
1
2
3
<!--INCLUDE:path /-->
<!--EVENT:site:instance:event [(name=wert;...)] /-->
<!--EVENT:site:instance:event [(name=wert;...)] -->Template<!--/-->
1
2
3
4
5
6
7
8
content_1[<!--ifRECORD-->content_2<!--noRECORD-->content_3<!--RECORDend-->content_4]
inside content_2:
<!--LOOP-->content_1<!--LOOP_END-->
<!--LOOP-->content_1<!--SUB_LOOP_IF{condition}-->content_2<!--SUB_LOOP_END-->content_3<!--LOOP_END-->
<!--IF_LOOP{condition}-->content_1<!--ELSE-->content_2<!--IF_LOOP_END-->
Everywhere:
<!--IF{condition}-->content_true<!--IF_ELSE-->content_false<!--IF_END-->
QuoteWürde ich auch, wenn sie nicht "Programmierersyntaxen" hätten, an die man kaum einen Webdesigner setzen kann.
2011-08-11T18:16:41 pqdas templating gefällt mir gar nicht. ist vermutlich sehr aufwendig zu warten, da man im template nur %s stehen hat und im code nach der reihenfolge schauen muss.
wenn dann würde ich gleich mit einem fertigen template-system arbeiten.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
package TemplateSimple; ########################################################################### # Einfaches Template-System # Arbeitet unabhängig von der Zeichenkodierung (UTF-8, ISO...) # Rolf Rost, 26.8.2011 ########################################################################### use strict; use warnings; use Carp; sub new{ my $class = shift; my $template = shift; my $templval = shift; croak qq(Erstes Argument muss sein: Scalar-Referenz auf Template) if ref $template ne 'SCALAR'; croak qq(Zweites Argument muss sein: Hash-Referenz mit Werten) if ref $templval ne 'HASH'; my $self = { TEMPLATE => $template, TEMPLVAL => $templval, TEMPLIST => [], }; return bless $self, $class; } sub expand{ my $self = shift; # Liste der Platzhalter namentlich ermitteln # Platzhalter gegen %s austauschen ${$self->{TEMPLATE}} =~ s/%(\w+)/$self->_xp($1)/eg; # Platzhalter werden nun gegen die Werte ausgetauscht foreach my $s(@{$self->{TEMPLIST}}){ $s = defined $self->{TEMPLVAL}{$s} ? $self->{TEMPLVAL}{$s} : ''; } ${$self->{TEMPLATE}} = sprintf ${$self->{TEMPLATE}}, @{$self->{TEMPLIST}}; } # Platzhalter gegen %s austauschen # Array TEMPLIST mit Namen der Platzhalter sub _xp{ my $self = shift; my $s = shift; push @{$self->{TEMPLIST}}, $s; return '%s'; } 1;######################################################################### package main; use strict; use warnings; my $template = qq( Vorname: %vorname Name: %name Ort: %ort PLZ: %plz ); my $templval = { name => "Rost", vorname => 'Rolf', ort => 'Oppenheim', plz => '55276', }; my $ts = TemplateSimple->new(\$template, $templval); $ts->expand; print $template;
2011-08-27T05:30:34 rostiNur keinen Schnellschuss ;)
QuoteProbiers aus ;-)
Quoteinwiefern habe ich schnell geschossen?
2011-08-27T17:18:55 janDarf ich fragen, warum Du HTML::Template statt Template-Toolkit benutzt?
2011-08-27T18:15:07 GwenDragonDie kürzere Syntax insbesondere die <? oder <%-Delimiter sind auch für Webdesigner ganz sinnvoll, denn deren Webeditoren meckern diese Elemente im HTML nicht an, während die TT-Syntax unübersichtlich für Nichtprogrammierer ist, schon dieses viele Geschreibe mit TMPL_.... Neee.
2011-08-29T10:39:44 GwenDragonHast Recht, TMPL_ gehört zu Template::HTML, aber TemplateToolkit hat eine seltsame Syntax.
2011-08-29T10:39:44 GwenDragonTrotzdem passt die HTML-fremde Auszeichnung von TemplateToolkit nicht in die Funktionalität von Webeditoren. Ich weiß ja nicht, mit was deine Designer edieren, aber ich nehme mal an Dreamweaver oder Golive.
Aber wenn der Arbeitsablauf ein ganz anderer ist und das HTML ganz anders erzeugt wird , wird das wohl gehen.
2011-08-27T17:54:26 pq2011-08-27T17:18:55 janDarf ich fragen, warum Du HTML::Template statt Template-Toolkit benutzt?
ich benutze HTML::Template nicht =)
ich habe auf basis von dessen syntax HTML::Template::Compiled geschrieben.
unterschiede:
2011-08-27T17:54:26 pqschneller (allerdings nur in persistenten umgebungen)
andere template-delimiter (statt <TMPL_IF foo> und <TMPL_VAR foo> kann man z.b. <%if foo %>, <%= foo %> oder [%if foo %], [%= foo %] schreiben. das ist gerade in HTML lesbarer und gleichzeitig kürzer
2011-08-27T17:54:26 pq[*] mehr möglichkeiten, zugriff auf verschachtelte datenstrukturen und objekte ([c][%= hashref.object.method %][/c] z.b.)
2011-08-27T17:54:26 pqexpliziter zugriff auf den root vom stash. ich habe in meinen template-parametern oft eine art config im root, also das sieht dann so aus: [%= .config.self_url %] (der punkt am anfang steht für root, obwohl ich im nachhinein den slash besser gefunden hätte, aber nun ist es so).
in HT kann man nur global_vars einstellen und hat keinen expliziten zugriff auf root, sondern muss sich darauf verlassen, dass an der stelle im stash, an der man sich befindet, kein variablenname ist, den man mit global_vars eigentlich weiter aussen ansprechen wollte.
2011-08-27T17:54:26 pqTT bietet womöglich noch mehr, hat mir aber auch schon zu viele moglichkeiten.
2011-08-27T17:54:26 pqausserdem mag ich es nicht, dass alles in TT mit [% END %] abgeschlossen wird.