Ich habe Forum von hier heruntergeladen, es funktioniert wunderbar aber ich würde gerne mit eigenem Layout gestalten bzw. Links, Buttons und Navi, oben mit Menueleiste, es muss etwas im Script geändert werden. Kann mir jemand dabei helfen?
Im voraus vielen Dank!-------------------------------
Hier ist die Datei, wie auf meinem eigenen Layout geändert werden sollte
<HTML>
<HEAD>
<TITLE>WebForum - Perl/CGI-Archiv</TITLE>
<style type="text/css">
<!--
A:link {text-decoration: none; color: steelblue}
A:visited {text-decoration: none; color: steelblue}
A:hover {color: steelbue;text-decoration:underline}
-->
</style>
</head>
<body bgcolor="#c0c0c0" text="#000000" link="steelblue" vlink="steelblue" alink="steelblue">
<center>
<a name="top"> </a>
<table border=0 cellspacing=0 cellpadding=0 width=750>
<tr><td>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td bgcolor="#FFFFFF" valign=top> </td>
<td valign=top bgcolor="#FFFFFF">
<p><br><font face="Verdana" size=-1><br>
-----------------------------------------------
Hier folgt nun das Skript
############################################################################
use Time::Local 'timelocal_nocheck' ;
############################################################################
# Start des Forums
############################################################################
sub start_wolfbbs {
#Puffer ausschalten
$| = 1 ;
#Anzeigezeitraumperioden (Bitte nicht ändern)
%per=("heute","0","ein Tag","1","zwei Tage","2","eine Woche","7","zwei Wochen","14","ein Monat","30","Alle","10000") ;
#Zähler
$nrofres=0 ;
#Akutelles Datum
&date_time() ;
###
#Programmablauf
if ($ENV{'QUERY_STRING'}) {
@para=split(/&/,$ENV{'QUERY_STRING'}) ;
$para[0]=~ s/\W//g ; $para[1]=~ s/\W//g ;
if ($para[0] eq "napost") {
#Neues Posting
&post_new_message() ;
} elsif ($para[0] eq "readmes") {
#Thread anzeigen
&html_head() ;
&show_message($para[1]) ;
&html_foot ;
}
} else {
#Übersicht anzeigen
&html_head() ;
&show_message_thread() ;
&html_foot() ;
}
}
############################################################################
# Anzeige des Beitrags-Thread
############################################################################
sub show_message_thread {
my (%LOAD) ;
###
#Form auslesen
&form_data() ;
###
#Ausgabe Übersicht
print <<"EOM" ;
<font $html_font size=-1>
<table border=0 width=100%>
<tr><td rowspan=3 valign=top $tab_left align=center><br><br><img src="$pic_dir/artikelou.gif" border=0 hspace=4 vspace=12></td>
<td rowspan=3><img src="$pic_dir/trenner.gif" border=0 width=15 height=1></td>
<td width=100%><table border=0 cellpadding=0 cellspacing=0 width=100%><tr>
<td><font $html_font><b>$boardname</b></font></td>
<td align=right>>> <a href="$back_link"><font $html_font size=-1><b>zurück</b></font></a> <<</td>
</tr></table>
<br> <br><font $html_font size=-1><b>Anzeigezeitraum: $FM{'periode'}</b> (<img src="$pic_dir/artnew.gif" border=0> neue Beiträge - max. $new_mes_days Tage)
EOM
###
#Daten laden
opendir (ETC , "$dat_dir") || die "Kann das Verzeichnis -$dat_dir- nicht öffnen:\n".$! ;
foreach my $file (readdir(ETC)) {
if ($file =~ /^\d+r$/) {
my $MES=&load_message($file) ;
my ($b,$d)=&check_date($MES->{LAST}) ;
$LOAD{$file}=$d if ( $b <= $per{$FM{'periode'}} ) ;
}
} closedir (ETC) ;
open(NR,"< $dat_dir/p.dat") || die "Kann die Datei -$dat_dir/p.dat- nicht öffnen:\n".$! ;
my $i = <NR> ;
close(NR);
###
#Thread aufbauen
foreach my $msg (sort { $LOAD{$b} <=> $LOAD{$a} } keys %LOAD) {
print qq(\n<br><img src="$pic_dir/trenner.gif" border=0 width=1 height=15>\n) ;
&thread_list($msg,0) ;
}
###
#Nicht gefunden
print "<br><ul>Es sind keine Beiträge in diesem Zeitraum vorhanden.</ul>" if ($nrofres==0) ;
###
#Rest ausgeben
print <<"EOM" ;
<br> <br> <br>
</td></tr><tr><td><br>
<form method=post action="$cgi_dir/$cgi_nam">
<table border=0 width=100%>
<tr><td align=left><font $html_font size=-1><b>Es werden $nrofres von $i Beiträgen angezeigt.</b></td>
<td align=center><img src="$pic_dir/trenner.gif" border=0 width=81 height=1></td>
<td align=center><SELECT NAME="periode">
<OPTION value="$FM{'periode'}" SELECTED>->Zeitraum<-
<OPTION value="Alle">Alle</option>
<OPTION value="heute">heute</option>
<OPTION value="ein Tag">ein Tag</option>
<OPTION value="zwei Tage">zwei Tage</option>
<OPTION value="eine Woche">eine Woche</option>
<OPTION value="zwei Wochen">zwei Wochen</option>
<OPTION value="ein Monat">ein Monat</option>
</SELECT></td><td align=center><input type=image src="$pic_dir/akt.gif" border=0></td>
<td align=center> </td></tr></table>
</FORM>
</td></tr></table><br>
<a name="new"><hr noshade size=1></a><br>
EOM
###
#Ausgabe Formular
&html_newart('Einen neuen Beitrag veröffentlichen') ;
}
############################################################################
# Erstellung der Thread-Liste
############################################################################
sub thread_list {
my ($tmp_msg_nr,$i_abstand)=@_ ;
my $next ;
if ($tmp_msg_nr !~ /\-/) {
my $MES=&load_message($tmp_msg_nr) ;
my $showdata=substr($MES->{DATE},0,6).substr($MES->{DATE},8,2) ;
my $abstand=$i_abstand*35 ;
$MES->{SUBJ}="<b>$MES->{SUBJ}</b>" if ($tmp_msg_nr eq $para[1]) ;
print qq~
<br><img src="$pic_dir/trenner.gif" border=0 alt="-" width="$abstand" height=1>
<a href="$cgi_host$cgi_dir/$cgi_nam?readmes&$tmp_msg_nr"><img src="$pic_dir/artikel.gif" border=0 alt="Beitrag" width=28 height=18><font $html_font size=-1>$MES->{SUBJ}</font></a><br>
<img src="$pic_dir/trenner.gif" border=0 alt="-" width="$abstand" height=1>
<img src="$pic_dir/trenner.gif" border=0 height=1 width=28><font $html_font size=-2>($MES->{NAME} | $MES->{DATE})</font>
~ ;
my ($back_stat)=&check_date($MES->{DATE}) ;
print "<img src=\"$pic_dir/artnew.gif\" border=0 alt=\"neuer Beitrag\" width=5 height=6>\n" if ($back_stat<=$new_mes_days) ;
$next=$MES->{NEXT} ;
$nrofres++ ;
$i_abstand++ ;
} else {
$next = $tmp_msg_nr ;
}
my @tmp_msg_thread = split(/\-/,$next);
foreach my $tmp_msg_thread (@tmp_msg_thread) {
&thread_list($tmp_msg_thread,$i_abstand) ;
}
}
############################################################################
# Auslesen einer Nachricht
############################################################################
sub show_message {
my $file_name=shift ;
my $MES=&load_message($file_name) ;
###
#Gewählten Beitrag einlesen
my $submes = ( $MES->{'SUBJ'} !~ /re:/i ? "re: $MES->{'SUBJ'}" : $MES->{'SUBJ'} ) ;
my $mail_tmp = "-" ;
my $http_tmp = "-" ;
$mail_tmp = "<a href=\"mailto:$MES->{MAIL}\">$MES->{MAIL}</a>" if ($MES->{MAIL} =~ /.*\@.*\..*/) ;
$http_tmp = "<a href=\"$MES->{HTTP}\" target=\"_blank\">$MES->{HTTP}</a>" if ($MES->{HTTP} =~ /^http:\/\/.*\..*/g) ;
###
#Ausgabe mit Thread
print <<"EOM" ;
<font $html_font size=-1>
<table border=0><tr>
<td rowspan=3 valign=top $tab_left align=center><br><br><img src="$pic_dir/artikelo.gif" hspace=4 border=0 vspace=12></td>
<td rowspan=3><img src="$pic_dir/trenner.gif" border=0 width=15 height=1></td>
<td width=100%><table border=0 cellpadding=0 cellspacing=0 width=100%><tr>
<td><font $html_font><b>$boardname</b></font></td>
<td align=right>>> <a href="$cgi_dir/$cgi_nam"><font $html_font size=-1><b>Übersicht</b></font></a> <<</td>
</tr></table><font $html_font size=-1><br><br><b>$MES->{SUBJ}</b></td></tr>
<tr><td><font $html_font size=-1><br>$MES->{TEXT}</td></tr>
<tr><td><br><br>
<table border=0 cellspacing=0>
<tr><td><font $html_font size=-1>Name:</td>
<td><font $html_font size=-1>$MES->{NAME}</td></tr>
<tr><td><font $html_font size=-1>Mail:</td>
<td><font $html_font size=-1>$mail_tmp</td></tr>
<tr><td><font $html_font size=-1>Datum: </td>
<td><font $html_font size=-1>$MES->{DATE}</td></tr>
<tr><td><font $html_font size=-1>WWW:</td>
<td><font $html_font size=-1>$http_tmp</td></tr>
</table></td></tr></table>
<br><hr noshade size=1><br>
<table border=0>
<tr><td rowspan=2 valign=top $tab_left align=center><img src="$pic_dir/artikelou.gif" hspace=4 vspace=5 border=0></td>
<td rowspan=2><img src="$pic_dir/trenner.gif" border=0 width=15 height=1></td>
<td><br><font $html_font size=-1><b>Antworten auf dieses Beitrag</b> (<img src="$pic_dir/artnew.gif" border=0> neue Beiträge - max. $new_mes_days Tage)</b><br></td>
</tr><tr><td>
EOM
&thread_list($MES->{ROOT});
print <<"EOM" ;
<br></td></tr></table>
<br><a name="new"><hr noshade size=1></a><br>
EOM
###
#Form für Post
&html_newart('Auf diesen Beitrag antworten',$para[1],$MES->{ROOT},$submes) ;
}
############################################################################
# Nachricht laden
############################################################################
sub load_message {
my $file=shift ;
my %MES ;
local $/ ;
###
#Daten laden
open (MES , "< $dat_dir/$file") || die "Kann die Datei -$dat_dir/$file- nicht öffnen:\n".$! ;
undef $/ ;
my $line=<MES> ;
close(MES) ;
$line =~ s/\n//g ;
###
#Hash zuordnen
while ($line =~ /(.*?)\|\|(.*?)\|\|EOL/g) {
$MES{$1}=$2 ;
}
###
#Rückgabe
return(\%MES) ;
}
############################################################################
# Ausgabe des Formulares
############################################################################
sub html_newart {
my ($tithread_liste,$prev_mes,$root,$submes)=@_ ;
my $isize=58 ;
print <<"EOM" ;
<table border=0>
<tr><td rowspan=2 valign=top $tab_left align=center><img src="$pic_dir/artikeln.gif" hspace=4 vspace=5 border=0></td>
<td rowspan=2><img src="$pic_dir/trenner.gif" border=0 width=15 height=1></td>
<td><br><p><font $html_font size=-1> <b>$tithread_liste</b></p><p>
<SCRIPT LANGUAGE=JavaScript>
<!-- Vor anderen Browsern verstecken
function chkFM() {
if(!document.mail.name.value) {
alert("Bitte Namen eintragen !");
document.mail.name.focus();
return false;}
if(!document.mail.subject.value) {
alert("Bitte Thema eintragen !");
document.mail.subject.focus();
return false;}
if(!document.mail.body.value) {
alert("Bitte einen Beitrag eintragen !");
document.mail.body.focus();
return false;}
}
// Ende verstecken -->
</script>
<form name="mail" method="post" action="$cgi_dir/$cgi_nam?napost" onSubmit="return chkFM()">
<table border=0 width=100 cellspacing=8 cellpadding=0>
<tr><td align=left valign=top><p><font $html_font size=-1>Name: </td>
<td><font color="#ff0000">!</font></td>
<td><input type=text name="name" size=$isize></td></tr>
<tr><td align=left valign=top><p><font $html_font size=-1>E-Mail:</td>
<td> </td>
<td><input type=text name="email" size=$isize></td></tr>
EOM
###
#URL eintragen (j/n)
if($url==1) {
print qq~
<tr><td align=left valign=top><p><font $html_font size=-1>URL:</td>
<td> </td>
<td><input type=text name="url" size=$isize maxlength=100 value="http://"></td></tr>
~ ;
}
###
#Ausgabe: Form (Thema und Text)
print <<"EOM" ;
<tr><td align=left valign=top><p><font $html_font size=-1>Thema:</td>
<td><font color="#ff0000">!</font></td>
<td><input type=text name="subject" size=$isize maxlength=100 value="$submes"></td></tr>
<tr><td align=left valign=top><p><font $html_font size=-1>Beitrag:</td>
<td valign=top><font color="#ff0000">!</font></td>
<td><textarea cols=44 rows=8 name="body" wrap=virtual></textarea></td></tr>
<tr><td><input type=hidden name="pmesnr" value="$prev_mes"><input type=hidden name="root" value="$root"></td>
<td> </td><td><p><br><input type=submit name="post" value="Beitrag veröffentlichen"></td></tr>
</table></p></form></td></tr></table><br><br>
EOM
}
############################################################################
# Einen neuen Beitrag veröffentlichen
############################################################################
sub post_new_message {
my $mes_num=&inc_mes_number() ;
my $file ;
###
#Form auslesen
&form_data() ;
###
#Neuen Beitrag schreiben
if (!$FM{'pmesnr'}) {
###
#File
$file=$mes_num."r" ;
###
#Root-Beitrag
open (PNM , "> $dat_dir/$file") || die "Kann die Datei -$dat_dir/$file- nicht öffnen:\n".$! ; ;
flock(PNM,2) if ($lock==1) ;
print PNM "NAME||$FM{'name'}||EOL\n" ;
print PNM "MAIL||$FM{'email'}||EOL\n" ;
print PNM "HTTP||$FM{'url'}||EOL\n" ;
print PNM "DATE||$tida||EOL\n" ;
print PNM "NEXT||||EOL\n" ;
print PNM "PREV||||EOL\n" ;
print PNM "ROOT||$file||EOL\n" ;
print PNM "SUBJ||$FM{'subject'}||EOL\n" ;
print PNM "TEXT||$FM{'body'}||EOL\n" ;
print PNM "LAST||$tida||EOL\n" ;
close (PNM) ;
} else {
###
#File
$file=$mes_num."p" ;
###
#Thread-Beitrag
open (PNM , "> $dat_dir/$file") || die "Kann die Datei -$dat_dir/$file- nicht öffnen:\n".$! ; ;
flock(PNM,2) if ($lock==1) ;
print PNM "NAME||$FM{'name'}||EOL\n" ;
print PNM "MAIL||$FM{'email'}||EOL\n" ;
print PNM "HTTP||$FM{'url'}||EOL\n" ;
print PNM "DATE||$tida||EOL\n" ;
print PNM "NEXT||||EOL\n" ;
print PNM "PREV||$FM{'pmesnr'}||EOL\n" ;
print PNM "ROOT||$FM{'root'}||EOL\n" ;
print PNM "SUBJ||$FM{'subject'}||EOL\n" ;
print PNM "TEXT||$FM{'body'}||EOL\n" ;
close (PNM) ;
###
#Thread eintragen
open (PNM , "< $dat_dir/$FM{'pmesnr'}") || die "Kann die Datei -$dat_dir/$FM{'pmesnr'}- nicht öffnen:\n".$! ;
my @lines=<PNM> ;
close (PNM) ;
open (PNM , "> $dat_dir/$FM{'pmesnr'}") || die "Kann die Datei -$dat_dir/$FM{'pmesnr'}- nicht öffnen:\n".$! ;
flock(PNM,2) if ($lock==1) ;
foreach my $line (@lines) {
if ($line =~ /^NEXT\|\|(.*)\|\|EOL/i) {
if (!$1) {
print PNM "NEXT\|\|$file\|\|EOL\n";
} else {
print PNM "NEXT\|\|$1-$file\|\|EOL\n";
}
} else {
print PNM $line ;
}
}
close (PNM) ;
###
#LastPost
open (PNM , "< $dat_dir/$FM{'root'}") || die "Kann die Datei -$dat_dir/$FM{'root'}- nicht öffnen:\n".$! ;
my @lines=<PNM> ;
close (PNM) ;
open (PNM , "> $dat_dir/$FM{'root'}") || die "Kann die Datei -$dat_dir/$FM{'root'}- nicht öffnen:\n".$! ;
flock(PNM,2) if ($lock==1) ;
foreach my $line (@lines) {
if ($line =~ /^LAST\|\|/i) {
print PNM "LAST\|\|$tida\|\|EOL\n";
} else {
print PNM $line ;
}
}
close (PNM) ;
}
###
#Adminmail verschicken
&send_mail($file) if ($adminmail==1) ;
###
#Anzahl Posts
open(NR,"+< $dat_dir/p.dat") || die "Kann die Datei -$dat_dir/p.dat- nicht öffnen:\n".$! ;
flock(NR,2) if ($lock==1) ;
my $mes_num = <NR> ;
$mes_num++ ;
seek(NR,0,0);
print NR $mes_num ;
close(NR);
###
#Seite laden
print"Location: $cgi_host$cgi_dir/$cgi_nam?readmes&$file\n\n" ;
}
############################################################################
# Ausgabe des HMTL-Kopfes
############################################################################
sub html_head {
my $line ;
###
#Ausgabe an Browser
print "Content-type: text/html\n\n" ;
###
#Kopf laden
if (-e "./tmpl/$html_head") {
open (HTML , "< ./tmpl/$html_head") ;
my @lines=<HTML> ;
close(HTML) ;
$line=join('',@lines) ;
}
###
#Ausgabe
print <<"EOM" ;
$line<table width=100% border=0 cellspacing=0>
<tr><td colspan=3>
EOM
}
############################################################################
# Ausgabe des HMTL-Footers
############################################################################
sub html_foot {
my $line ;
###
#Fuss laden
if (-e "./tmpl/$html_foot") {
open (HTML , "< ./tmpl/$html_foot") ;
my @lines=<HTML> ;
close(HTML) ;
$line=join('',@lines) ;
} else {
$line=qq(</td></tr></table>) ;
}
###
#Ausgabe
print qq(</td></tr>$line) ;
}
############################################################################
# Aktuelles Datum und Zeit
############################################################################
sub date_time {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+($tzone*3600));
$mon++;
$min = "0$min" if ($min < 10) ;
$hour = "0$hour" if ($hour < 10) ;
$mon = "0$mon" if ($mon < 10) ;
$mday = "0$mday" if ($mday < 10) ;
$year = 1900+$year;
###
#Globale Vars
$date = "$mday.$mon.$year";
$tida = "$date-$hour:$min" ;
$datcheck = "$mday$mon$year" ;
}
############################################################################
# Prüfung des Alters
############################################################################
sub check_date {
my $tocheck1=$_[0] ;
my ($b1,$b2,$b3,$b4,$b5) = $tocheck1 =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\-(\d\d)\:(\d\d)/;
my $tag1 = substr($tocheck1,0,2) ;
my $mon1 = substr($tocheck1,3,2) - 1 ;
my $jah1 = substr($tocheck1,6,4) ;
my $chk1 = timelocal_nocheck (0,0,0,$tag1,$mon1,$jah1) ;
my $tag2 = substr($datcheck,0,2) ;
my $mon2 = substr($datcheck,2,2) - 1 ;
my $jah2 = substr($datcheck,4,4) ;
my $chk2 = timelocal_nocheck (0,0,0,$tag2,$mon2,$jah2) ;
my $back_stat=int(($chk2-$chk1)/86400) ;
###
#Rückgabe
return($back_stat,"$b3$b2$b1$b4$b5") ;
}
############################################################################
# Zähler Hochsetzen
############################################################################
sub inc_mes_number {
###
#Nummer hochzählen
open(NR,"+< ./data/postid.txt") || die "Kann die Datei -data/$file- nicht öffnen:\n".$! ;
flock(NR,2) if ($lock==1) ;
my $mes_num = <NR> ;
$mes_num++ ;
seek(NR,0,0);
print NR $mes_num ;
close(NR);
###
#Rückgabe
return($mes_num) ;
}
############################################################################
# Formular auslesen
############################################################################
sub form_data {
my $buffer ;
###
#Forumlardaten einlesen und Sonderzeichen konvertieren
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @paare = split(/&/, $buffer);
foreach my $paar (@paare){
my ($val1, $val2) = split(/=/, $paar);
$val1 =~ tr/+/ /;
$val1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$val2 =~ tr/+/ /;
$val2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FM{$val1} = $val2;
$FM{$val1} =~ s/<([^>]|\n)*>/ /g unless($htmlpost==1) ;
$FM{$val1} =~ s/\&/\&\;/g;
$FM{$val1} =~ s/"/\"\;/g;
$FM{$val1} =~ s/</\<\;/g;
$FM{$val1} =~ s/>/\>\;/g;
$FM{$val1} =~ s/\cM\n/<BR>/g;
$FM{$val1} =~ s/\n\cM/<BR>/g;
$FM{$val1} =~ s/\cM/<BR>/g;
$FM{$val1} =~ s/\n/<BR>/g;
$FM{$val1} =~ s/<BR>\s\s\s+/<BR><BR>/g;
$FM{$val1} =~ s/<BR>\t/<BR><BR>/g;
$FM{$val1} =~ s/<BR>\s/<BR>/g;
$FM{$val1} =~ s/\s<BR>/<BR>/g;
$FM{$val1} =~ s/<BR><BR>/<P>/g;
$FM{$val1} =~ s/<P><BR>/<P>/g;
$FM{$val1} =~ s/<P>>/<P>>/g;
$FM{$val1} =~ s/<BR>>/<BR>>/g;
$FM{$val1} =~ s/<BR>>/<BRR>/g;
$FM{$val1} =~ s/<BR>/ /g;
$FM{$val1} =~ s/<BRR>/<BR>>/g;
$FM{$val1} =~ s/\s+/ /g;
$FM{$val1} =~ s/^\s+//g;
$FM{$val1} =~ s/\s+$//g;
$FM{$val1} =~ s/\|/\//g;
}
}
############################################################################
# Mail mit Sendmail verschicken
############################################################################
sub send_mail {
my $mes_num=shift ;
my $body=$FM{'body'} ;
($body=$FM{'body'}) =~ s/<p>/\n\n/gi ;
###
#Online/Offline
if($offline==1) {
open(MAIL , "> ./temp/mail_neuereintrag.txt") ;
} else {
open(MAIL , "|$mailprog -t") ;
}
###
#Mail ausgeben
print MAIL "To: $mailto\n";
print MAIL "From: $FM{'email'} ($FM{'name'})\n";
print MAIL "Subject: Neuer Forum-Beitrag: $boardname\n\n";
print MAIL "---------------------------------------------------------------------------\n";
print MAIL "Thema: $FM{'subject'}\n";
print MAIL "Name: $FM{'name'}\n";
print MAIL "Mail: $FM{'email'}\n";
print MAIL "WWW: $FM{'url'}\n";
print MAIL "Date: $date\n";
print MAIL "---------------------------------------------------------------------------\n\n";
print MAIL "$body\n\n";
print MAIL "---------------------------------------------------------------------------\n";
print MAIL "$cgi_host$cgi_dir/$cgi_nam?readmes&$mes_num\n";
print MAIL "---------------------------------------------------------------------------\n";
close (MAIL) ;
}
#############################################################################
# ENDE
#############################################################################
1 ;
Datum: 17.04.2005-15:34
