Hallo Zusammen,
ich habe mal versucht, das Forumsbeispiel von Christoph in der Bib so anzupassen, dass ich mit dem Template "forum" auf die Datenbank "foren" zugreifen kann. Bei allen "get" und "put" habe ich noch "foren" drangehangen, aber es funktioniert nicht.
Wo fehlt noch was?
...
# --- Nutzer-Eingabe bearbeiten ---
if(%_put)
{
unless($Vorschau)
{
get "Id==#", "foren";
$emsg.="Bitte geben Sie Ihren Namen ein! " if $_put{Name} eq "";
$emsg.="Bitte geben Sie einen Titel ein! " if $_put{Titel} eq "";
$emsg.="Bitte geben Sie einen Text ein! " if $_put{Text} eq "";
$emsg.="Der Text ist zu lang! Bitte kürzen Sie ihn auf maximal $maxtext Zeichen." if length($_put{Text})>$maxtext;
if($emsg eq "")
{
if($Name ne $_put{Name} || $Titel ne $_put{Titel} || $Text ne $_put{Text})
{
if($_get{Pos} eq "")
{
get "Pos==#", "foren";
$newPos=$Pos+1;
$_get{range}="";
} else
{
get "Pos<=$_get{Pos} Pos>=".($_get{Pos}-1)." sort=-", "foren";
$_put{Shift}=$Shift+1; $newPos=$Pos; get_next;
while(get_next)
{
last if $Shift<$_put{Shift};
$newPos=$Pos;
}
$Pos=0 if $_get{Pos}==$Pos;
$newPos=($Pos+$newPos)/2;
my $mx=$newPos; chop $mx; $newPos=$mx if($mx>$Pos);
}
$_put{Pos}=$newPos;
put, "foren";
$msg="Ihr Eintrag wurde aufgenommen...";
} else
{
$msg="Ihr Eintrag ist bereits gespeichert...";
$newPos=$Pos;
}
$_get{Pos}="";
}
}
$allpos="$newPos#";
}
$mylink=$mylinkr="/cgi-bin/baseportal.pl?htx=$htx&wcheck=1";
$mylinkr.="&range=$_get{range}" if $_get{range};
# --- Ausgabe eines ausgewählten, abgewiesenen oder vorgeschauten Eintrags ---
out "<a name=\"eingabe\"> </a><br>";
out "<ul><font size=3".($emsg?" color=d80000":"")."><b>$emsg$msg</b></font></ul>" if $emsg || $msg;
if($Vorschau || %_put)
{
out "<center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> ".($Vorschau?"Vorschau:":"Ihr Eintrag:")."</b></font></td><td width=10% align=center nowrap> <a href=\"#list\"><font size=2 face=arial>Zur Liste</a> </td></tr></table></center><font face=arial,helvetica size=2><ul>";
&all_out("", $_put{Name}, $_put{EMail}, $_put{WWW}, $_put{Titel}, $_put{Text});
out "</ul>";
}
if($_get{Pos} ne "")
{
out "<center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> Ausgewählter Eintrag:</b></font><td width=10% align=center nowrap> <a href=\"#list\"><font size=2 face=arial>Zur Liste</a> </td></tr></table></center><font face=arial,helvetica size=2><ul>";
get "Pos==$_get{Pos}", "foren";
&all_out();
out "<h3>Ihre Antwort:</h3>";
if($Vorschau || $emsg)
{
&form_out($_get{Pos}, $_put{Name}, $_put{EMail}, $_put{WWW}, $_put{Titel}, $_put{Text});
} else
{
my $t=$Titel;
$t="Re: $t" unless $t=~ /^Re: /i;
&form_out($Pos, "", "", "", $t);
}
my $p=int($Pos); $p++ if $p ne $Pos;
get "sort=- Pos<=$p Pos>".($p-1), "foren";
out "<p><a href=\"$mylinkr\">Neuer Eintrag</a>";
if($_amount_query>1)
{
out "</ul><br><center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> Alle Einträge zum Thema:</b></font></td><td width=10% align=center nowrap> <a href=\"#list\"><font size=2 face=arial>Zur Liste</a> </td></tr></table></center><font face=arial,helvetica size=2><ul>";
$allpos=&all_out($_get{Pos});
out "<br>";
} else
{
$allpos="$_get{Pos}#";
}
} else
{
out "<center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> Neuer Eintrag:</b></font></td><td width=10% align=center nowrap> <a href=\"#list\"><font size=2 face=arial>Zur Liste</a> </td></tr></table></center><font face=arial,helvetica size=2><ul>";
if($Vorschau || $emsg)
{
&form_out($_get{Pos}, $_put{Name}, $_put{EMail}, $_put{WWW}, $_put{Titel}, $_put{Text});
} else
{
&form_out();
}
}
# --- Ausgabe der ersten Eintraege und der Liste ---
unless($wcheck)
{
out "</ul><br><center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> Die aktuellsten $getfirst Einträge:</b></font></td></tr></table></center><font face=arial,helvetica size=2><ul>";
get "Id==* sort=- range=0,$getfirst", "foren";
$allpos=&all_out();
}
get "Pos==* sort=- range=".($_get{range} || "0,$getlist"), "foren";
out "<a name=\"list\"> </a></ul><center><table cellspacing=2 width=95% cellpadding=4><tr bgcolor=e0e0e0><td><font face=arial,helvetica size=3><b> Liste der ".($_range>0?"Einträge von $_range bis ".($_range+$_range_length>$_amount_query?$_amount_query:$_range+$_range_length):"ersten $getlist Einträge").":</b></font></td><td width=10% align=center nowrap> <a href=\"#eingabe\"><font size=2 face=arial>Zur Eingabe</a> </td></tr></table></center><font face=arial,helvetica size=2><ul>";
&list_out($allpos, $_get{Pos});
# --- blaetter-links ---
out "<br><br><br>";
$r1=$_range; $r2=$_range_length || $getlist;
if($_amount_all>$r2)
{
my $z=0;
@ilist=();
if($r1-$r2>=0)
{
push @ilist, "<< <a href=\"$mylink&range=0,$r2\">Neueste Einträge</a>";
push @ilist, "< <a href=\"$mylink&range=".($r1-$r2).",$r2\">Neuere Einträge</a>";
$z++;
}
push @ilist, "<a href=\"#eingabe\">Zur Eingabe</a>";
if($r1+$r2<$_amount_all)
{
push @ilist, "<a href=\"$mylink&range=".($r1+$r2).",$r2\">Ältere Einträge</a> >";
push @ilist, "<a href=\"$mylink&range=".(int($_amount_all/$r2)*$r2).",$r2\">Älteste Einträge</a> >>";
$z+=2;
}
out "</ul><center><table width=85%><tr><td";
out " align=right" if $z==2;
out " align=middle" if $z==3;
out " nowrap><font size=2 face=arial,helvetica>".(join " | ", @ilist)."</td></tr></table>";
}
# --- Formular-Ausgabe ---
sub form_out
{
my($pos, $name, $email, $www, $titel, $text)=@_;
$name=~ s/"/"/gs;
$email=~ s/"/"/gs;
$www=~ s/"/"/gs;
$text=~ s/</</gs; $text=~ s/>/>/gs;
$titel=~ s/"/"/gs;
out <<EOF;
.....
}
sub list_out
{
my($allpos, $pos)=@_;
my $tlast=0;
out "<nobr>";
while(get_next)
{
if(index("#$allpos", "#$Pos#")>=0)
{
out "</td></tr></table>" if ($pos==$Pos && $tlast) || $tlast==-1;
out "<table cellspacing=0 cellpadding=2 bgcolor=".($pos==$Pos?"e0e0e0":"f0f0f0")." width=90%><tr><td nowrap><font face=arial,helvetica size=2>" if $pos==$Pos || $tlast<1;
$tlast=($pos==$Pos?-1:1);
} else
{
out "</td></tr></table>" if $tlast;
out " "; $tlast=0;
}
if($Shift) { out " " x ($Shift*8+2); }
else { out "> "; }
$Titel=substr($Text, 0, 50)."..." if $Titel eq "";
$Name=convert_html($Name); $Titel=convert_html($Titel); # keine html-tags erlaubt
$Datum=datum($Datum, "kurz");
out "<b><a href=\"$mylinkr&Pos=$Pos".($pos==$Pos?"#eingabe":"")."\">$Titel</a></b> von <b>$Name</b> am $Datum<br>\n";
}
out "</td></tr></table>" if $tlast;
out "</nobr>";
}
sub all_out
{
my($pos)=shift; # 1. Parameter = Position des ausgewaehlten Eintrags
my $allpos=""; my $alink="#eingabe";
while(get_next || @_>0)
{
($Name, $EMail, $WWW, $Titel, $Text, $Datum)=(@_, time) if @_>0;
$WWW=~ s#^http://##; # Eventuelles http:// zu Beginn abschneiden
$Datum=datum($Datum, "lang"); # datumsfeld in schönes datum wandeln
$EMail="EMail: <a href=\"mailto:$EMail\">$EMail</a>" if $EMail ne ""; # EMail-Ausgabe, nur wenn EMail-Feld einen Inhalt hat
$WWW="WWW: <a href=\"http://$WWW\" target=\"_blank\">$WWW</a>" if $WWW ne ""; # WWW-Ausgabe, nur wenn WWW-Feld einen Inhalt hat
$Titel=substr($Text, 0, 50)."..." if $Titel eq ""; # Wenn kein Titel, nimmt er die ersten 50 Zeichen des Textes als Titel
$Name=convert_html($Name); $Titel=convert_html($Titel); # keine html-tags erlaubt
$allpos.="$Pos#";
out "<table cellspacing=0 cellpadding=0 border=0 bgcolor=e0e0e0 width=90%><tr><td><font face=arial,helvetica size=2>" if $pos ne "" && $pos==$Pos;
out <<EOF;
<table width=90%><tr><td><font face=arial size=2>Beitrag von <b>$Name</b> am $Datum<br>
$EMail $WWW
<h4>$Titel</h4>
<p><ul><br>
EOF
my $ca="<p><table width=90% cellpadding=10><tr><td bgcolor=f0f0f0><font size=3><code>";
my $ce="</code></td></tr></table>";
my $flag=0;
my $nx="";
$Text=convert_links($Text);
foreach $x (split "\n", $Text)
{
if($flag==0)
{
$flag=2 if $x=~ s/^: //;
$flag=3 if $x=~ /^((\s*)<|\$|\{|\}|(out|get|put|mod|if|else)(\s|$|\(?))/;
out $ca if($flag>1);
$x=~ s/^(\s+)/" " x length($1)/ge;
} elsif($flag>0)
{
$flag=-1 if $flag==2 && !($x=~ s/^: //);
$flag=-1 if $flag==4 && !($x=~ /^((\s*)<|\$|\{|\}|(out|get|put|mod|if|else)(\s|$|\(?))/);
if($flag==3 && !($x=~ /^((\s*)<|\$|\{|\}|(out|get|put|mod|if|else)(\s|$|\(?))/))
{
$nx="$x<br>";
$flag=4;
next;
}
if($flag==-1)
{
out $ce;
$flag=0;
}
}
out "$nx$x<br>"; $nx="";
}
out $ce if $flag>0;
out "</ul></td></tr></table>";
if($pos==$Pos && $Pos ne "")
{
out "</table><p>";
} else
{
$alink="$mylinkr&Pos=$Pos";
}
out " <a href=\"$alink\">Antworten</a>" if $_amount>1 && @_==0;
last if @_>0;
out '</ul><center><hr size=1 width=80%></center><ul>' if $_loop<$_amount-1;
}
return $allpos;
}
</perl>
hmmm... ich weiß, das Template ist ein wenig lang....
Oliver ;-)