Thread wie trenne ich den Inhalt und das layout bei cgi/html (43 answers)
Opened by chris- at 2008-10-01 10:05

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

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