Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12567[/thread]

wie trenne ich den Inhalt und das layout bei cgi/html

Leser: 14


<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten
chris-
 2008-10-01 10:05
#115050 #115050
User since
2007-10-18
18 Artikel
BenutzerIn
[default_avatar]
Hi,

bin gerade am Anfang meiner cgi-Karriere ;-). Was mir wichtig ist, gleich von Beginn an eine gute Trennung von Seiteninhalt und dem Layout bei cgi durchzuführen. Ich möchte - wenn möglich - das cgi in einer Datei, den html-Code in einer anderen, der wiederum CSS benutzt.

Hat von euch jemand Doc und Links zu dem Thema?

Was sind eure Erfahrungen dazu?

Danke,
Chris
moritz
 2008-10-01 10:22
#115051 #115051
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Mit einem Template-System wie etwa CPAN:HTML::Template::Compiled oder CPAN:Template::Toolkit.
MartinR
 2008-10-01 11:21
#115053 #115053
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
chris-+2008-10-01 08:05:30--
... das cgi in einer Datei ...

... und vielleicht schaust Du Dir auch gleich noch z.B. CPAN:CGI::Application an
pktm
 2008-10-01 15:15
#115064 #115064
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
MartinR+2008-10-01 09:21:06--
chris-+2008-10-01 08:05:30--
... das cgi in einer Datei ...

... und vielleicht schaust Du Dir auch gleich noch z.B. CPAN:CGI::Application an


Das kann ich nur uneingeschränkt empfehlen.
http://www.intergastro-service.de (mein erstes CMS :) )
Taulmarill
 2008-10-01 16:01
#115066 #115066
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Content ist HTML, Layout ist CSS. Siehe http://csszengarden.com/
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
scriptor
 2008-10-01 19:25
#115088 #115088
User since
2008-05-07
69 Artikel
BenutzerIn
[Homepage] [default_avatar]
Man kann auch durchaus Alles selbst machen, man lernt ne Menge dabei.
chris-
Ich möchte - wenn möglich - das cgi in einer Datei, den html-Code in einer anderen, der wiederum CSS benutzt.

CSS spielt hier keine Rolle.
Du solltest von Anfang an jede Anfrage mit einem rewrite in einer .htaccess Datei auf Dein Skript umlenken, sieht etwa so aus:
Code: (dl )
1
2
3
RewriteCond 	%{SCRIPT_FILENAME}			!/resources/
RewriteCond %{SCRIPT_FILENAME} !start.pl$
RewriteRule ^(.*)$ /cgi-bin/start.pl/$1?&%{QUERY_STRING} [L]

Dein Perl untersucht nun den Aufruf auf Gültigkeit (Pfad, (User, Session)). Ich nenn das Controller. Am Ende ist klar, welche Seite benutzt wird und damit werden in der Seite benötigte Inhalte geholt, formatiert (in Templates) und an passender Stelle ausgegeben. Dafür gibt es viele Lösungsansätze.
Ein einfaches Template-System ist mit ein paar Zeilen programmiert und deckt erweitert 95% aller Anforderungen ab.
Eine andere Sache ist die Formatierung von Daten, denn Du solltest HTML in Daten vermeiden. Dafür kann man fertige Module z.B. markdown einbinden.

Ich habe mit cgiscriptor.pl
angefangen, was für den Anfang sehr überschaubar war. Inzwischen habe ich ein umfangreiches Framework aufgebaut.

Bevor sich jemand aufregt:
Natürlich kann man auch vorhandene Module nehmen, ich möchte nur anregen, sich zunächst selbst an die Problematik anzunähern. Umsteigen kann man dann immer noch.
pq
 2008-10-01 21:09
#115089 #115089
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
scriptor+2008-10-01 17:25:31--
Ein einfaches Template-System ist mit ein paar Zeilen programmiert und deckt erweitert 95% aller Anforderungen ab.

würde ich von abraten. es gibt genug vorhandene systeme, je nach anforderung kann man
sich eins aussuchen.
ich weiss selbst, wie schwierig sich code umstellen lässt, der vorher ein eigenes templating
benutzt hat.
gerade weil man nach und nach mehr funktionalität braucht, kann das ein grosses chaos werden.

template-systeme wie CPAN:HTML::Template oder CPAN:HTML::Template::Compiled
(letzteres von mir) bieten dir z.b. auch ein default_escape. wenn du das auf 'HTML' setzt, hast
du von vorneherein XSS so gut wie ausgeschlossen.
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
chris-
 2008-10-06 15:49
#115207 #115207
User since
2007-10-18
18 Artikel
BenutzerIn
[default_avatar]
Danke für all die Links und Tipps.
Werde sie lesen und beherzigen.

Chris
chris-
 2008-10-06 15:55
#115208 #115208
User since
2007-10-18
18 Artikel
BenutzerIn
[default_avatar]
Noch eine Frage:
Gibt es eine Übersicht von Vor- und Nachteilen?
Auctioneer
 2008-10-07 03:58
#115229 #115229
User since
2008-09-30
26 Artikel
BenutzerIn
[Homepage] [default_avatar]
Der Vorteil von HTML Templates liegt vielleicht darin, dass diese etwas einfacher mit HTML Editoren nachbearbeitet werden können. Allerdings kann es passieren, dass, je nach Template System, interne "Seiten-Schnittstellen-Kommando-Wörter" nach einer solchen Bearbeitung plötzlich weg sind, und dann funzt die Template nicht mehr.

HTML Templates machen vielleicht Sinn, wenn grosse HTML Inhalte eingelesen werden müssen, denn der Script selber nimmt sonst riesige Ausmasse an, was die Uebersichtlichkeit beim Editieren erschweren kann. Allerdings kann man den Script in einzelne Teile zerlegen, um dieses Problem zu lösen.

Da normalerweise in einem Script sehr viele sehr kurze HTML Sequenzen vorhanden sind, die vielleicht nur eine oder zwei HTML Zeilen beinhalten, macht es fast keinen Sinn, derartige Dinge auszulagern, denn sonst verliert man ohne HTML Teile letztlich den Ueberblick im Script selber. Ich habe mir soeben ein derartiges "Werk" zur Brust genommen und gestaunt, wie schlecht man es machen kann, nur weil man um jeden Preis "templaten" wollte.

Die Geschwindigkeit von HTML Teilen innerhalb Scripts kann massiv erhöht werden, wenn der Server nicht jeden Buchstaben eines HTML Teils als Perl Script Teil abrufen (und auf scripttechnische Korrektheit prüfen) muss, sondern den HTML Teil nur als reinen Text (ohne Fehlerkontrolle) ablesen kann. Das erreicht man, wenn man HTML Sequenzen anstatt:

print "<img src=\"musterbild.jpg\" alt=\"Muster text\" border=\"0\">";

zum Beispiel so:

print qq|<img src="musterbild.jpg" alt="Muster text" border="0">|;

oder so:

print qq~<img src="musterbild.jpg" alt="Muster text" border="0">~;

schreibt.

Es gibt noch andere Varianten wie:

print <<EO_HTML;
<img src="musterbild.jpg" alt="Muster text" border="0">
EO_HTML

Die sind alle einwandfrei und funktionieren in den allermeisten Fällen. Man muss nur darauf achten, dann innerhalb des HTML Teils keine genutzten Sonderzeichen wie | (alt124) oder ~ (alt??) zu verwenden, wenn man die entsprechenden Sonderzeichen als "Begrenzer" für diesen (spezifischen) HTML Teil innerhalb des Scripts einsetzt.

Die viel eingesetzte, nach meinen Erfahrungen jedoch schlechteste Variante ist:

print =<<"EOF"
...
...
EOF

weil hier die Perl Backslashes \ vielfach auch innerhalb HTML beibehalten werden sollten, sonst kann es haufenweise Errors geben, ausgenommen, man verzichtet völlig auf die "Gänsezeichen", was aber eigentlich ein Murks ist. Ausserdem kann man ohne Gänsezeichen (je nach Script) keine mehrwörtigen (z.B.) Bildinformationen -alt=Muster text- Informationen eintragen weil so nur das erste Wort nach -alt=Muster- ausgelesen wird, abgesehen vom möglichen Folge-Error, der das zweite (offene) Wort im weiteren Programmablauf hinterlässt.

print =<<"EOF";
<img src=\"musterbild.jpg\" alt=\"Muster text\" border=\"0\">
EOF

und weil der Abstand zwischen dem Start/Schluss - EOF manchmal eine Leerlinie betragen muss, damit es vom Server "verstanden" wird:

print =<<"EOF";

<img src=\"musterbild.jpg\" alt=\"Muster text\" border=\"0\">

EOF

Kleinigkeiten, aber manchmal wertvoll...

Die beste Lösung ist, den Script seine eigenen HTML Templates erstellen zu lassen, und diese Seiten als Start- und Folge-Seiten der Site zu präsentieren. Zugriffe auf den Script erfolgen dann erst nach Eingabe irgendwelcher Kommandos. Das gibt mit Abstand am meisten Speed und den kleinsten Server-Load.

Der von mir eingesetzte Indexer-Script ist kostenlos und GPL, es würde aber wahrscheinlich doch etwas Fachwissen voraussetzen, um das Ding auch für andere Scripts anzupassen.

Gute Nacht

Ernie
Never judge another men before you walk a mile in his shoes
<< |< 1 2 3 4 5 >| >> 44 Einträge, 5 Seiten



View all threads created 2008-10-01 10:05.