Schrift
[thread]723[/thread]

Lösch Button (Seite 2)

Leser: 1


<< |< 1 2 3 4 5 ... 7 >| >> 61 Einträge, 7 Seiten
master
 2006-05-10 16:58
#7498 #7498
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@pq

Quote
du willst den template-code on-the-fly ändern? ich würde mal
sagen, wen du das musst, dann ist dein design grundlegend
verkehrt. ich bin mir sicher, dass man das auch so lösen kann.


Naja das Design ist nicht "verkehrt", viel mehr sehr komplex.
Es geht um Statistiken, auf der Grundlage eines Templates.

Wobei der Stil, ja selbst das Template innerhalb z.b. eines Loops für gewisse stellen geändert werden können muss. "on the fly" und alles möglichst in Perl, und nur max. 2 Befehle in HTML.

Mal braucht es z.b. ein "<tr>" und mal nicht. oder z. B. nur nach 4 Schleifendurchläufen.

Der Code im Loop soll mal so und mal so dargestellt sein.

zudem müssen die Variablen GANZ KLAR on the fly ersetzt werden.

So ungefähr in der Art:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTML__
<b>My Home Directory is <TMPL_VAR NAME=Wert></b><br>

Perl__ im loop ungefähr so
sub loop
{

for $x (1..3)
{
$neu = $template->wo($code_des_loops);
$template->param(Wert => $x); #wert ersetzen
$template->add($neu);
}
}

Wert ist nun zuerst auf 1, dann 2, dann 3


Danach:

Code: (dl )
1
2
3
<b>My Home Directory is 1</b><br>
<b>My Home Directory is 2</b><br>
<b>My Home Directory is 3</b><br>
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Antworten mit Zitat
pq
 2006-05-10 17:07
#7499 #7499
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
master: ich versteh immer noch nicht, was genau dir bei HTML::Template
fehlt. bzw. zum einen sagst du, du willst kein TMPL_IF, weil das "schlecht"
ist (wieso?), aber zum anderen brauchst du es, und du willst nur
TMPL_LOOPs. aber statt einer TMPL_LOOP hast du dann merkwürdigen
code, der eine loop generiert.
naja, aber dich zwingt ja keiner, ein CPAN-templating-system zu benutzen =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Antworten mit Zitat
pq
 2006-05-10 17:11
#7500 #7500
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=master,10.05.2006, 14:58]zudem müssen die Variablen GANZ KLAR on the fly ersetzt werden.

So ungefähr in der Art:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTML__
<b>My Home Directory is <TMPL_VAR NAME=Wert></b><br>

Perl__  im loop ungefähr so
sub loop
{

for $x (1..3)
{
   $neu =  $template->wo($code_des_loops);
    $template->param(Wert => $x);     #wert ersetzen
    $template->add($neu);
}
}

Wert ist nun zuerst auf 1, dann 2, dann 3


Danach:

Code: (dl )
1
2
3
<b>My Home Directory is 1</b><br>
<b>My Home Directory is 2</b><br>
<b>My Home Directory is 3</b><br>
[/quote]
Code: (dl )
1
2
3
<%loop homedir%>
 <b>My Home Directory is <%= _ %></b><br>
<%/loop%>


Code: (dl )
$htc->param(homedir => [qw(a b c)]);


Code: (dl )
1
2
3
<b>My Home Directory is a</b><br>
<b>My Home Directory is b</b><br>
<b>My Home Directory is c</b><br>


fertig.

edit: ok, habe das "sub loop" überlesen.
aber ich denke wirklich, das kann man anders lösen.
es liegt ausschließlich daran, dass die subroutine loop() die parameter
noch nicht alle kennt, bevor das template angefangen wird, auszugeben?\n\n

<!--EDIT|pq|1147266943-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Antworten mit Zitat
master
 2006-05-11 12:54
#7501 #7501
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@PQ

If ist schlecht, weil die Programmierlogik klar in den Code gehört. Um Loop kommt man nicht herum, da ja teile des templates wiederholt werden sollen.

Daher sollte ein gutes template sehr wenige "funktionen" besitzen (und HTML-konform sein).. Man kann mit loop und der ersetzung (den wichtigsten sachen) eh alles realisieren.

Sonst könnte man ja auch sachen wie "open" ins template integrieren usw. am ende hat man eine art template-programmiersprache, wenns dumm kommt nicht mehr editierbar für wisigwy-editoren.

ausserdem ist es verwirrend wenn die programmierlogik zum teil im code und zum teil im template ist. Mich stört sogar schon "loop" aber der ist nun mal lebenswichtig.
------

Vielleicht habe ich zu grosse Erwartungen an TMPL_LOOP.
ps. Kann man die Syntax ändern?
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Antworten mit Zitat
pq
 2006-05-11 13:10
#7502 #7502
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=master,11.05.2006, 10:54]If ist schlecht, weil die Programmierlogik klar in den Code gehört. Um Loop kommt man nicht herum, da ja teile des templates wiederholt werden sollen.[/quote]
if ist nicht schlecht, genauso wenig wie loop. sage ich jetzt mal so.
du bist der erste, von dem ich höre, dass es schlecht sei. naja, geschmackssache.
jedenfalls habe ich noch keinen webbie kennengelernt, der nicht versteht,
was if bedeutet. es soll sogar webbies geben, die xslt können.
Quote
ps. Kann man die Syntax ändern?

welche syntax? wie ändern?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Antworten mit Zitat
Gast Gast
 2006-05-11 13:14
#7503 #7503
Autsch.

Du verwechselst da was. Die Begriffe Businesslogic und Viewlogic (auch Templatelogic) beziehen sich auf die Logik bzw. den Kontext der darin befindlichen Routinen. Nicht darauf, ob die Template Engine ein IF kann, oder nicht, bzw. ob dieses eingesetzt wird. Durch Ablehnung von IF stopfst du einfach deine gesamte Logik (Business- und View-) in dein Script. Das ist nur ein kleiner Schritt zu in Perl eingebettetem HTML.

Eine gute Templateengine sollte daher flexibel sein, und möglichst viel unterstützen, damit die Trennung auch sauber funktioniert. Ein einschränkendes System verwenden, um nicht in Versuchung zu geraten es zu vermischen ist zwar eine Lösung, die passt aber nicht so ganz zu Perl's Philosophie.
Antworten mit Zitat
master
 2006-05-11 18:40
#7504 #7504
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@pq & P

"if" ist gehört nicht da ganz klar nicht rein.. bzw. der funktionalität her, könnte man es lassen. aber mit dem vermerk "nur für notfälle"

Es wäre auch dumm das Rad 2 mal zu erfinden. In Perl gibt's bereits if.. usw. dazu braucht man das nichts template einzubauen das verwirrt nur und ist unsauber da man programmierung und darstellung trennen sollte.

Zudem hat das template-If viel weniger möglichkeiten.. man müsste quasi alle funktionen integrieren.. und am ende hat man ein Super-template-model das zwar alles kann,
dann kann man gerade so gut so einen mist schreiben..

Code: (dl )
1
2
3
4
5
6
<?php?>
HTML
<?php?>
HTML
<?php?>
HTML


Zudem muss das Template editierbar bleiben (HTML-Konform). Also dargestellt werden wenn man es ohne es zu ändern nur so in den "Browser zieht". Cpan::template flüchtet gemäss author hier in die Kommentare..

Was ich im prinzip nicht schlimm finde, aber manchmal will man eben gleich "sehen" wo etwas ersetzt wird.


Grundsätzlich ist bei einem guten System programmierlogik, ablauf nicht ins template implementiert. Sowas wäre totaler schwachsinn auch wenn jetzt z. B. coldfusion usw. in die richtung gehen.

Ein template muss nichts "können" nur darstellen
den rest sollte man den richtigen Programmiersprachen überlassen...
1. sonst gibts durcheinander
2. programmierlogik gehört nicht in ein "layout"

Das modul ::template ist im prinzip relativ ok... nur ist das "if" überflüssig. Sowas ist schlechte programmierung.
ps. sagte doch nichts von buissnesslogik oder?

Sauberer Stil ist:

GUI (Interface, layout, darstellung, vorlagen(templates))
------------
Verarbeitung
------------
Datenhaltung

Und das hat seinen Grund. Nur weil es ev. viele falsch machen, heisst es nicht, dass das richtig wäre.

Es würde ja auch keiner von euch auf die Idee kommen ein Bild binär in den template-code zu integrieren. dann beim Parsen auslesen und in eine datei zuschreiben. Wäre ja eignetlich möglich..

Stellt euch mal ein mehre Templates mit vielen ifs vor.
im Hauptcode werden dann alle templates implementiert, mit Perl-ifs.
da verliert man den überblick. oder plötzlich wird etwas nicht mehr angezeigt,


ps. PHP und ASP's <??>HTML<??>-Ansätze sind totaler Mist.
Zum Glück geht das in perl nicht so einfach.

Wer so entwickelt soll sich schämen. Wir haben hier in der Firma leider nur solche Vorarbeiten :-( Änderungen dauern Tage, welche sonst in 2 Minuten gemacht wären, hätte man die Trennung.

HTML und Code gehören so weit es geht getrennt.
Am Ende ist es aber besser ein Template zu nutzen als keines..

Und wenn man das Template IF nutzt, darf man keine darstellungs-logik paralell in Perl implentieren... "entweder oder" dann kommt man an den Anschlag irgendwann und muss gewisse Sachen trotzdem in Perl machen. Am Ende entsteht das Chaos, weil mal hier(perl) mal im Template if's usw. stehen.

Programmierung || Darstellung sind 2 völlig verschiedene Sachen. Vermischt man es, gibts Probleme.

Ich weiss das aus eigener Erfahrung von früher her. z. B. mit der Visual Basic-Krücke.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Antworten mit Zitat
Strat
 2006-05-11 18:48
#7505 #7505
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
if finde ich ganz nuetzlich, z.B.
[html]
<!-- TMPL_IF NAME=showImages -->
<img src="blablubb.gif" alt="bildchen" />
<!-- TMPL_ELSE -->
bildchen
<!-- /TMPL_IF -->
[/html]
oder so; dann kann man im script ueber
Code: (dl )
$template->param(showImage => $wert);

steuern, ob da bildchen angezeigt wird oder nur ein text. ($wert wird z.B. nicht direkt so angegeben, sondern via my $set = $sth->fetchrow_hashref() aus der Datenbank ausgelesen und 1:1 als param verwendet, z.B. $template->param(%$set);)\n\n

<!--EDIT|Strat|1147359316-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Antworten mit Zitat
Strat
 2006-05-11 18:51
#7506 #7506
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
oder:
[html]
<!-- TMPL_IF NAME=daten -->
<table class="daten">
<!-- TMPL_LOOP NAME=daten -->
<tr>...</tr>
<!-- /TMPL_LOOP -->
</table>
<!-- TMPL_ELSE -->
<p>Sorry, keine Daten vorhanden</p>
<!-- /TMPL_IF -->
[/html]
wie willst du sowas ohne TMPL_IF (oder besser noch: TMPL_UNLESS) machen?

nur wenn die if's im template und im code parallel sind, dann wird's unhandlich; aber das steht auch in der Doku zu HTML::Template (und vermutlich auch HTC)\n\n

<!--EDIT|Strat|1147359399-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Antworten mit Zitat
master
 2006-05-11 18:56
#7507 #7507
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@P

Ich verstehe deine Einstellung. Jedoch Business- & viewlogic zu trennen war schon immer sehr schwer.

Klar erlaubt Perl vieles... aber man sollte den leuten wenigstens einen hinweis geben, das NICHT beim template so zu nutzen.

Die Busieness & viewlogic gehören eigentlich - streng genommen - weder ins Perl, noch ins template. Sind in der Programmiersprache jedoch einiges besser aufgehoben, als in der "darstellungsvorlage".

Die Anzeige-logik, ist meistens so oder so programmiertechnisch an perl gebunden.

Ein template-system mit vielen befehlen usw. bedeutet nur das man es aus der Progammiersprache rauszieht, und in seine vorlage schreibt. Aber was schreibt man da rein? If's, includes usw.?
Ausserdem verleitet ein solches system zur schlechten entwicklung.

Der Entwickler sollte sich besser gedanken machen wie er die Buisnesslogik rausziehen will. z.b. in eine externe datei, oder durch einen guten aufbau. Aber meistens ist es gar nicht nötig. Layout / GUI vom Code zu trennen, ist aber lebenswichtig.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Antworten mit Zitat
<< |< 1 2 3 4 5 ... 7 >| >> 61 Einträge, 7 Seiten



View all threads created 2006-05-09 12:24.