Datenbank basierte Linkseite
Funktionsweise
In den Zeilen 3 bis 6 werden die benötigten Perl Module eingebunden.
In den nachfolgenden Zeilen bis 46 finden sich vorkonfigurierte Variablen zur Hintergrundfarbe,
anzuzeigendes Logo, Button um zur Homepage zurückzukehren und die Pfade bzw URL's zu den Bildern,
den Admintools , URL zur Homepage und natürlich die notwendigen Definitionen zur MySQL Datenbank.
Wird nun das Skript mit dem Querystring ?admin=
aufgerufen, ist die Bedingung in Zeile
50 erfüllt, und es wird ein Redirect zur URL des Admintools der Kategorienverwaltung ausgelöst.
Ansonsten geben wir zuerst einen gültigen HTTP_Header sowie eine Überschrift bestehend aus Logo und
Rückkehr Button zur Homepage aus (Unterprogramm http_header
Zeilen 113-136). Danach
(Zeilen 56 bis 74) lesen wir die Gruppenbezeichnungen aus der Tabelle link_kat
ein und
geben das Ganze in einer Zeile als Links aus, wobei die Verknüpfung zum später zu erstellenden Anker
über die Gruppenid erfolgt.
Gleichzeitig speichern wir die Daten im Hash %kat
mit der Gruppenbezeichnung als
key
und der Gruppenid als value
. Die Ausgabe der Links erfolgt in den Zeilen
76-92. Hier sortieren wird den Hash %kat
zuerst nach Gruppennamen. Geben den Gruppennamen
als Überschrift aus und die Gruppenid als Anker. Dann lesen wir alle zu dieser Gruppenid gehörenden Datensätze
aus der Datenbank, sortieren nach Anzeigename und geben den Link und das zugehörige Erstellungsdatum aus.
Das Ganze wiederholen wir so oft noch Daten im Hash stehen.
Der Link ist eigentlich so angelegt, das beim Klicken ein neues Fenster geöffnet wir. Das ist eigentlich schon
alles.
Das Skript
Das Programm steht als Text Datei hier zum Download bereit.
1 #!/usr/bin/perl -w 2 3 use CGI qw/:standard :netscape/; 4 use strict; 5 use CGI::Carp qw/fatalsToBrowser/; 6 use DBI; 7 8 ############################################### 9 # Copyright 1999 Dr Thomas Wieland 10 # wieland@thwieland.de 11 # für www.perl-stammtisch.de 12 ############################################### 13 14 # Hintergrundfarbe 15 my $bgrdcl = '#EEEEEE'; 16 17 # Titel der Seite 18 my $page_title = "Linkseite"; 19 20 # Bild für die Überschrift 21 my $title_gif = "linklogo.gif"; 22 23 # Bild für den Homepagebutton 24 my $homepage_gif = "homepage.gif"; 25 26 # Pfad zu den Bildern ausgehend vom Root Verzeichnis des httpd 27 my $icons = '/images'; 28 29 # Adresse des Adminskripts (zum Löschen von Einträgen) 30 my $adminurl = 'http://localhost/cgi-bin2/mydir/kat_admin.cgi'; 31 32 # Url der Homepage 33 my $homeurl = 'http://localhost/'; 34 35 36 # Variablen für Datenbank 37 my ($dbh, $sth, $sql, $row); 38 my $db_type = 'mysql'; 39 my $port = 0; 40 my $hostname = "localhost"; 41 my $db_name = 'perl_stammtisch'; 42 my $DB_DSN = "DBI:$db_type:$db_name:$hostname:$port:"; 43 my $DB_USER = "Benutzer für die Datenbank"; 44 my $DB_PASSWD = "Password für die Datenbank"; 45 my $Tab_Links = 'links'; 46 my $Tab_Link_Kat = 'link_kat'; 47 48 49 # Falls Parameter admin zum Adminskript umlenken 50 if (defined param('admin')) { 51 print redirect(-uri => $adminurl); 52 } else { 53 54 &http_header; 55 56 my %kat = undef; 57 # Datenbank Verbindung herstellen 58 $dbh = DBI->connect($DB_DSN, $DB_USER, $DB_PASSWD, 59 { RaiseError => 1 } ); 60 61 # Zeile mit Links zu den einzelnen Kategorien erzeugen 62 $sql = qq[ SELECT * FROM $Tab_Link_Kat ORDER BY gruppe ]; 63 $sth = $dbh->prepare($sql); 64 $sth->execute(); 65 66 print "<center>|"; 67 while ($row = $sth->fetchrow_arrayref) { 68 print b(" "), 69 a({href => "#".$row->[1]},$row->[1]), 70 b(" |"); 71 $kat{"$row->[1]"} = $row->[0]; 72 } 73 print "</center>",br; 74 $sth->finish; 75 76 my $kategorie = undef; 77 foreach $kategorie (sort(keys %kat)) { 78 # Überschrift und Anker 79 print "<blockquote>\n",a({name => $kategorie}), h3($kategorie),"\n"; 80 # passende Einträge holen und ausgeben 81 $sql = qq[ SELECT url, name, stamp FROM $Tab_Links 82 WHERE grpid = '$kat{$kategorie}' ORDER by name]; 83 $sth = $dbh->prepare($sql); 84 $sth->execute(); 85 while ($row = $sth->fetchrow_hashref) { 86 print a({href => $row->{'url'}, 87 target => '_blank'}, 88 $row->{'name'})," ",$row->{'stamp'},br,"\n"; 89 } 90 print "</blockquote>\n",hr,"\n"; 91 } 92 $sth->finish; 93 94 95 96 # Datenbank Verbindung lösen 97 $dbh->disconnect(); # Datenbankverbindung lösen. 98 99 print "<blockquote>\n", 100 "Wir möchten ausdrücklich betonen, daß wir keinerlei Einfluß ", 101 "auf die Gestaltung und die Inhalte der gelinkten Seiten haben. ", 102 "Deshalb distanzieren wir uns hiermit ausdrücklich von allen ", 103 "Inhalten aller gelinkten Seiten auf der gesamten Website inkl. ", 104 "aller Unterseiten. Diese Erklärung gilt für alle auf der ", 105 "Homepage ausgebrachten Links und für alle Inhalte der Seiten, ", 106 "zu denen Links oder Banner führen.\n</blockquote>\n"; 107 print end_html(); 108 109 } 110 111 # Unterprogramme 112 113 ############################################### 114 sub http_header { 115 ############################################### 116 print header(), 117 start_html( -BGCOLOR => $bgrdcl, 118 -title => $page_title, 119 -author => 'wieland@thwieland.de', 120 -meta=>{'keywords' => 'Perl-Stammtisch', 121 'copyright'=>'copyright 1999 Dr. Thomas Wieland'} 122 )."\n"; 123 print center(table({-border => 0, 124 -width => '95%'}, 125 TR(td(img{-src => "$icons/$title_gif", 126 -alt => 'Linkseite Logo'}), 127 td(a({-href=> $homeurl}, 128 img{-src => "$icons/$homepage_gif", 129 -alt => 'Zur Homepage', 130 -border => 0} 131 ) 132 ) 133 ) 134 ) 135 ),hr,"\n"; 136 }
Zurück zum Anfang dieses Projekts.