Kommentar-Skript erweitern.
Marcel
- perl
Hallo,
ich möchte das follgende Skript, das schon im Einsatz ist und also vom Grundprinzip gleich bleiben muss um ein Feature erweitern. Mithilfe des Skrips können Kommentare zu Fotos abgegeben werden. Das Problem ist nur, dass ich keine Ahnung von Perl-Programmierung habe. Ich möchte ähnlich einem Counter bei jedem abgegeben Kommentar einen Wert um eins erhöhen, dass ich bei der Fotoübersicht den Wert 'es wurden schon xxx komantare abgegeben' ausgeben kann. Ich hoffe ihr versteht was ich gerade versucht habe in Worte zu fassen und wisst einen guten Rat.
mfg Marcel
#!/usr/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $cgi = new CGI;
my $page = $cgi->param('page');
BEGIN {
unless ($ENV{DOCUMENT_ROOT}) {
$ENV{DOCUMENT_ROOT} = 'dann muss man den Pfad einfach selber eingeben...';
# oder, zwar etwas unsicherer, den Script-Pfad nehmen und alles bis zum /cgi-bin übernehmen
}
}
my $path_extension;
open( F, '<./pages.txt' );
while (<F>) {
chomp;
my ($page_id, $file) = split /=/;
if ($page eq $page_id) {
$path_extension = $file;
}
}
close F;
unless ($path_extension) {
die 'Page-ID ist ungültig oder nicht eingetragen';
}
print 'Content-Type: text/html'."\015\012";
if ($cgi->param('add') != 1) {
print '
<html><head>
<link rel="stylesheet" href="../../main.css">
</head><body><center>
Ich bitte euch Beleidigungen, sexistischen Äußerungen und ähnliches zu unterlassen.<br>
<form action="/cgi-bin/newcomment.pl" method="post">
<input type="hidden" name="page" value="'.$page.'" />
<input type="hidden" name="add" value="1" />
<textarea name="comment" cols="40" rows="5"></textarea><br />
<br><input TYPE=submit SIZE="40" VALUE="Kommentar abschicken" style="width: 160px; color: black; background: #FFFFC8">
</form></body>
</html>
';
} else {
unless (-e $ENV{DOCUMENT_ROOT}.$path_extension) {
die 'Page ("'.$ENV{DOCUMENT_ROOT}.$path_extension.'") wurde nicht gefunden, falsch eingetragen?';
}
my $content;
open( F, '<'.$ENV{DOCUMENT_ROOT}.$path_extension );
while (<F>) {
$content .= $_;
}
close F;
my $comment = $cgi->param('comment');
$comment .= '<hr>';
$content =~ s/<!--CommentsOn$page-->/$comment<!--CommentsOn$page-->/msig;
open( F, '>'.$ENV{DOCUMENT_ROOT}.$path_extension );
print F $content;
close F;
print 'Location: '.$path_extension."\015\012\015\012";
}
Halihallo Marcel
ich möchte das follgende Skript, das schon im Einsatz ist und also vom Grundprinzip gleich bleiben muss um ein Feature erweitern. Mithilfe des Skrips können Kommentare zu Fotos abgegeben werden. Das Problem ist nur, dass ich keine Ahnung von Perl-Programmierung habe. Ich möchte ähnlich einem Counter bei jedem abgegeben Kommentar einen Wert um eins erhöhen, dass ich bei der Fotoübersicht den Wert 'es wurden schon xxx komantare abgegeben' ausgeben kann. Ich hoffe ihr versteht was ich gerade versucht habe in Worte zu fassen und wisst einen guten Rat.
In Anbetracht des Scriptes ist eine Erweiterung dieser Art nicht ganz einfach zu realisieren. Das Problem dabei ist, wie Michael Schröpl schon im Thread http://forum.de.selfhtml.org/archiv/2002/12/32034/#m173931 genannt hat, dass die Daten nicht vom Design getrennt sind. Die Daten gehen in das Design und von dort aus sind sie nicht ohne "grossen" Aufwand wieder zu extrahieren. Du solltest dir jetzt Gedanken machen, ob du das Script nicht umprogrammieren möchtest (also die Daten vom Design zu trennen), oder auf dem gegebenen Weg weiterfahren möchtest, jedoch dadurch Mehraufwände in Kauf nehmen musst. Ich würde dir zur ersteren Lösung (Redesign des Codes) raten.
Viele Grüsse
Philipp
Hallo Phillip,
du bist ja ziemlich aktiv im Forum. Ich habe gehofft, dass du darauf antwortest, da das Skript ja von dir stammt.
Du schreibst: »»Ich würde dir zur ersteren Lösung (Redesign des Codes) raten.
Ist ja sicherlich ein guter Rat, aber wie soll ich das anstellen, ich habe keine Anhnung von Perl.
mfg Marcel
Halihallo Marcel
du bist ja ziemlich aktiv im Forum. Ich habe gehofft, dass du darauf antwortest, da das Skript ja von dir stammt.
Von einem gestressten "mir", welcher nur etwa 1 Stunde dafür aufgewendet hat, ja. Das Script ist alles andere als gut. Versteh mich nicht falsch, es ist funktional, wie du bemerkt hast, aber eben _nur_ das.
Du schreibst: »»Ich würde dir zur ersteren Lösung (Redesign des Codes) raten.
Ist ja sicherlich ein guter Rat, aber wie soll ich das anstellen, ich habe keine Anhnung von Perl.
<konstruktiv>
Wenn du denkst, du kriegst das mit Perl nicht hin, dann müssen wir uns nach anderen Möglichkeiten umsehen, denn Perl lernt sich nicht innerhalb von ein/zwei Tagen (meistens).
Unterstützt dein Server SSI? - Dann gibt's ne einfache Möglichkeit. Oder programmierst du in JavaScript, dann wäre eine Perl/JavaScript Schnittstelle schnell gemacht).
</konstruktiv>
<ehrlich>Ich hoffe du verstehst, wenn ich dir nicht den ganzen Code überarbeitet vorlege, dieses Script hatte ich nur mal so auf die schnelle programmiert und mehr wird's auch nicht werden. Zudem würdest du auch gar nichts dabei lernen und darum soll's in diesem Forum gehen. Ich kann, um dir dein Vorhaben nicht (ganz) zu vermiesen, jedoch bei obengenannten Möglichkeiten helfen.</ehrlich>
Lösungsvorschläge von oben:
Das Script bekommt eine page_id (welche übrigens besser in comment_guid umbenannt werden sollte, aber das braucht dich nicht zu stören; ist nur falsch, da es mehrere Kommentare auf einer Page haben kann und somit page_id keinen Sinn macht). Diese page_id ist eine Zeichenfolge, welche innerhalb aller verwalteten Seiten eineindeutig ist, jeder Kommentar (ich meine nicht den Kommentar eines Users, sondern den "KommentarKatalog/Summe aller Userkommentare zu einem Bild, oder was auch immer") hat also seine eigene und unique page_id. Es liegt nahe, dass du eine Datei anlegst und darin die Anzahl User-Kommentare zählst (das ist einfach zu realisieren). Und hier kommen obengenannte "Schnittstellen" zum Einsatz: Über SSI könntest du diese Zahl in deine HTML (oder dann neu .shtml Datei) einfach einfügen, ohne noch irgendwas tun zu müssen. Oder JavaScript: Ein weiteres Script sendet JavaScript-Code zurück, welcher z. B. für jedes KommentarFeld die Anzahl User-Kommentare enthält.
Also, ich stelle eine Rückfrage: Hast du Erfahrung mit JavaScript oder mit SSI (Server Side Includes) ?
Aber folgendes muss ich hier nochmals festhalten: Beide Lösungen sind unschön und es missfällt mir solche vorzuschlagen; sehe jedoch auch ein, dass du sonst vielleicht etwas "aufgeschmissen" wärst.
Viele Grüsse
Philipp