vars ersetzt Platzhalter in _kopf.html und _fuss.html. * - $this->menu erzeugt das Menü am linken Rand. * - $this->pagename enthält jeweils den Namen der Seite im Menü. * - Standardmäßig wird der Seitentitel auf * "$this->basename . $this->pagename" * gesetzt. * - $this->addrs kann per * addr("Hans Müller"); ? > * mitten im Text irgendwo aufgerufen werden und bietet eine ZENTRALE * STELLE, wo die Mailadressen gewartet werden. * - $this->img, $this->icon, $this->icons und $this->diricons werden unten * genauer erklärt. Sie bieten Funktionen um automatisch (mit * entsprechenden Symbolen) Dateilisten in eine Seite einbinden zu * können. * * Fragen beantworte ich gerne. Ggf. ist es aber sinnvoll sich an * php@php-center.de zu wenden (die deutsche PHP-Mailingliste). Auf * www.php-center.de kann man sich für die Liste eintragen. * * -- Jens Benecke (jens-whm@spamfreemail.de), Juni 2002 */ ########################################################################### # Die Haupt-Klasse. Diese Klasse kümmert sich um # Menüs, Rahmen, Layout (in _kopf.html/_fuss.html), Titel, usw. # # Änderungen hier sind GLOBAL, ausser sie wurden in einer einzelnen Datei # wieder speziell überschrieben. ########################################################################### class page { var $vars = array( # Absoluter Pfad des Web-Hauptverzeichnises, z.B. /home/kunde/0192/web DOCUMENT_ROOT => "/", # Relativer Pfad vom Web-Hauptverzeichnis, z.B. /myhomepage DOCUMENT_REL => ".", BASISTITEL => "Basistitel: ", MAIN_TITEL => "Main-titel: ", HOME => "/", MENU_TITEL => "Menü", TITEL_IMG => "titelbild.png", TITEL_ALT => "ALT-Text für Titelbild", LOGO_IMG => "logo.jpg", LOGO_ALT => "ALT-Text für Logo", MOTD => '"Advanced Java Servlet Portal Platform Software Agent Corporate Management System" [Tim]', WEBMASTER_LINK => "webmaster@DOMAIN.DE?subject=Webseitenkommentar", WEBMASTER_TEXT => "Mail an den Webmaster", BOTTOM_TEXT => "Copyright (c) 2003 XYZ.", ); # wenn 1 und SSL installiert ist, wird transparent auf HTTPS redirected var $https = "no"; # # Menü. Angucken und nachmachen. # var $menu = array( "Hauptseite" => "index.php", "Erster Eintrag" => "eins.php", "Untermenü ohne Hauptseite" => array( "Blah 1" => "bla1.php", "Blah 2" => "bla1.php?wirklich=wichtig", ), "Untermenü mit Hauptseite" => array( 0 => "unter-index.php", "bla" => "blubb.php", ), ); # # Hieraus wird unter dem Menü ein SELECT-Feld mit Links generiert. # var $links_header = "Interessante Links"; var $links = array( "Mitfahrzentrale"=>"http://www.hitchhikers.de/", " " => "", "Heise Newsticker" => "http://www.heise.de/", "Slashdot" => "http://www.slashdot.org/", "Linux FAQ" => "http://www.linuxfaq.de/", "KDE Homepage" => "http://www.kde.org/", "Freshmeat.net" => "http://www.freshmeat.net/", " " => "", "UserFriendly" => "http://www.userfriendly.org/static/", "Dilbert" => "http://www.dilbert.com", " " => "", ); # # Zentrale Stelle für alle Links und Verknüpfungen usw, die ständig benutzt # werden. # var $addrs = array( "TUHH" => "http://www.tuhh.de/", "TUHH Rechenzentrum" => "http://www.tuhh.de/rzt/", "TUHH-AStA" => "http://www.tuhh.de/asta/", "Uni-HH" => "http://www.uni-hamburg.de/", "FH-HH" => "http://www.fh-hamburg.de/", "AK-WaN" => "http://www.tu-clausthal.de/student/wohnheime/AK-WaN.html", "Studentenwerk Hamburg" => "http://www.studentenwerk-hamburg.de/", "Heimrat Homepage" => "http://www.whm.tu-harburg.de/~heimrat/", "Wohnheim Homepage" => "http://www.whm.tu-harburg.de/", "Wohnheim FTP" => "ftp://ftp.whm.tu-harburg.de/", "Wohnheimnetzwerk-FAQ" => "/doc-whmfaq.php", "Anmeldeformular" => "/netz-anmeldung-formular.pdf", "Netzwerk-AG Mail" => "mailto:netzag@mail.whm.tu-harburg.de", "Heimrat Mail" => "mailto:heimrat@mail.whm.tu-harburg.de", "Wohnheim Protektor" => "http://www.tuhh.de/rzt/rzt/it/", "alle" => "mailto:alle@mail.whm.tu-harburg.de?Subject=Wohnheimhomepage" ); ########################################################################### ########################################################################### # # Hierunter sollte nichts mehr geändert werden! Wenn ihr Vorschläge für die # allgemeine Version habt, dann schickt mir die zu, ich baue sie ein! # Wenn ihr die Funktionalität eurer eigenen Version ändern wollt, dann # erweitert diese Klasse (mit extends.. , siehe oben) und laßt diese Datei # in Frieden. :) # ########################################################################### ########################################################################### # # Adressen aus dem Array "addrs" raussuchen. Für Adressen, die # sich manchmal ändern könnten, ist das IMHO sinnvoll. # function addr($text="") { # erstmal #return sprintf("%s", $this->addrs[$text], $text); return $this->url($this->addrs[$text], $text); } # # Konstruktor # var $pagename; function page() { $REQUEST_URI = $_SERVER[REQUEST_URI]; # Wie heisst die aktuelle Seite im Menü? reset($this->menu); while(list($c,$v) = each($this->menu)) { if(is_array($v)) { reset($v); while(list($cc,$vv) = each($v)) { #error_log(" vv=$vv, REQ=".basename($REQUEST_URI), 0); if(is_array($vv)) { reset($vv); while(list($ccc,$vvv) = each($vv)) { #error_log(" vvv=$vvv, REQ=".basename($REQUEST_URI), 0); if(basename($REQUEST_URI) == $vvv) { if($ccc===0) $this->pagename = "$c / $cc"; else $this->pagename = "$c / $cc / $ccc"; break; } } } if(basename($REQUEST_URI) == $vv) { if($cc===0) $this->pagename = $c; else $this->pagename = "$c / $cc"; break; } } if($this->pagename!="") break; } else { if(basename($REQUEST_URI) == $v) { #error_log(" v=$v, REQ=".basename($REQUEST_URI), 0); $this->pagename = $c; break; } } } reset($this->menu); $this->vars[MAIN_TITEL] = ($this->vars[MAIN_TITEL]!="") ? $this->vars[MAIN_TITEL] : $this->pagename; $this->addrs = ($this->addrs) ? $this->addrs : $this->links; if(eregi("lynx|w3m|links", $GLOBALS[HTTP_USER_AGENT])) { $this->vars[LYNX] = "Lynx-User: benutzt wenigstens ein grosses Terminal, 80x25 schockt doch nicht ;-)"; } else { $this->vars[LYNX] = ""; } $this->vars[FILE_LAST_CHANGED] = date('d.m.Y H:i', filemtime($_SERVER[SCRIPT_FILENAME])); } # # Kopf-HTML datei einlesen und Variablen aus $vars ersetzen # var $kopf_printed = 0; function kopf() { # Nur wenn der Kopf ausgegeben wurde, soll in _fuss.php (automatisch) # auch der Fuss ausgegeben werden. Das müssen wir hier festhalten, denn # es gibt einige Seiten die halt _kein_ Menü usw. benötigen. $this->kopf_printed = 1; # Menü in die Variablenstruktur einfügen - PHP kann # Klassenvariablen nur statisch festlegen, Variablen, die den # Rückgabewert einer Funktion enthalten sollen müssen später # aufgerufen werden # (also oben "C_MAIN => $this->menu()" geht nicht!) $this->vars["C_MENU"] = $this->menu(); $this->vars["LINKS_MENU"] = $this->linksmenu(); $kopf_html = join("", file($this->vars[DOCUMENT_ROOT]."/_kopf.html")); reset($this->vars); foreach($this->vars as $var => $val) #print "$var => $val
"; $kopf_html = str_replace($var, $val, $kopf_html); return $kopf_html; } # # Erstellt aus dem obigen Array das Menü links am Seitenrand. # HIER müsste auch das MENÜ-LAYOUT angepasst werden! (keine Template) # # Maximal 3 Menüebenen gehen bisher. Ich denke, das reicht vorerst. # function menu() { # "Home"-Eintrag nach ganz oben, danach ein
dazwischen $br = ""; $ret .= "\n\n"; foreach($this->menu as $text => $link) { if(is_array($link)) { # => Untermenüs erzeugen! if($link[0]) { # Menüüberschrift ist selbst ein Link? #$biglink = "\n"; $biglink = "$text\n"; } else { $biglink = $text; } $ret.= "$br\n"; $br = "\n"; #$ret.= "\n"; #$br = "
"; $__target = ""; $___target = ''; # Untermenü-Einträge erzeugen foreach($link as $stext => $slink) { # Spezieller Eintrag: __target, gibt Fensterziel an if($stext==="__target") { $__target = "target='$slink'"; continue; } # Unter-Untermenü-Einträge erzeugen if(is_array($slink)) { if($this->pagename == "$text / $stext") $css = "class=active"; if($this->pagename != "$text / $stext") $css = "class=inactive"; if($slink[0]) { $ret.= "\n"; } else { $ret.= "\n"; } #$ret .= "\n"; } $___target = ''; #$ret .= "\n"; } else { #error_log("$stext\t\t".$this->pagename,0); if($this->pagename == "$text / $stext") $css = "class=active"; if($this->pagename != "$text / $stext") $css = "class=inactive"; if($stext!="0") # haben wir oben schon behandelt $ret.= "\n"; } } #$ret.= "
"; } else { # sonst: Kein Sub-Array, nur ein einfacher Eintrag if($this->pagename == "$text") $css = "class=active_big"; if($this->pagename != "$text") $css = "class=inactive_big"; #$ret.= "\n"; $ret.= "$br\n"; $br = "\n"; #$br = "
"; } } $ret .= "\n
$text
$biglink
$br$biglink
~$stext
~$stext
\n"; foreach($slink as $sstext => $sslink) { #error_log("$stext\t$slink,\t$sstext\t$sslink",0); if($sstext==="__target") { $___target = "target='$sslink'"; continue; } if($this->pagename == "$text / $stext / $sstext") $css = "class='s_active'"; if($this->pagename != "$text / $stext / $sstext") $css = "class='s_inactive'"; if($sstext!="0") # haben wir oben schon behandelt $ret.= "
- $sstext
~ $stext
$br$text
$text

\n\n"; return $ret; } # # Generiert das Menü aus Links (als HTML-FORM) und gibt es an page() # weiter. # function linksmenu() { if(empty($this->links)) return ""; reset($this->links); $ret.= "
"; return $ret; } # # Fuss-HTML datei einlesen und Variablen aus $vars ersetzen # function fuss() { $fuss_html = join("", file($this->vars[DOCUMENT_ROOT]."/_fuss.html")); foreach($this->vars as $var => $val) $fuss_html = str_replace("$var", $val, $fuss_html); return $fuss_html; } ########################################################################### # HILFSFUNKTIONEN (INTERN) ########################################################################### # # URL-Funktion # Frisst maximal 4kb Bandbreite pro HTTP-Aufruf. # url("http://..../html-dokument") => extrahiert HTML-Titel als Link # url("ftp://..../datei.foo") => zeigt Dateiname ohne Pfad + Grösse an # url("lokales-bild.gif|jpg|png") => zeigt Dateiname und Grösse als Link # url(" .... ") ## weitere Ideen? # # var $url_notitle = true; # Titel von Webseite holen NICHT per default var $url_newwindow = "ext"; # in neuem Fenster öffnen? var $url_popup = false; # HTML Title als 'title=...' statt Text? function url($url, $text="") { if($text == "" or $this->url_popup) { if(!$this->url_notitle) { if(eregi("^http://", $url)) { $ret = $this->url_http($url); } elseif(eregi("^ftp://", $url)) { $ret = $this->url_ftp($url); } else { $ret = $this->url_local($url); } } else { $ret = strtolower(eregi_replace("^.*://", "", $url)); } if($this->url_popup) { $popup = "title=\"$ret\""; $ret = $text!="" ? $text : $ret; } } else { $ret = $text; } if($this->url_newwindow == "ext") { $blank = ereg("://", $url) ? "target=_blank" : ""; } elseif($this->url_newwindow == true) { $blank = "target=_blank"; } return "$ret"; } # # INTERN # function url_local($url) { $size = round(filesize($url)/1024); if(eregi("\.html?$", $url)) { $foo = eregi("(.*)", join("\n", file($url)), $name); $name = $name[1]; } else { $name = basename($url); } return "$name [$size kb]"; } function url_http($url) { if($fp = fopen($url, "r")) { $txt = ""; while(!feof($fp) and eregi("", $txt)===false) { $txt .= fread($fp, 1024); #print(strlen($txt)."
"); } fclose($fp); $foo = eregi("(.*)", $txt, $title); $title = $title[1]; } if($title=="") $title=$url; return $title; } # NOCH BUGGY! function url_ftp($url) { $rc = eregi("^ftp://([a-z0-9\-\.]+)/(.*)", $url, $regs); print join(" / ", $regs). "
"; list($url, $host, $path) = $regs; $rc = eregi("(.*)/([^/]+)", $path, $regs); $dir = $regs[1]; $file = $regs[2]; print join(" / ", $regs). "
"; $ftp = ftp_connect($host); $rc = ftp_login($ftp, "anonymous", "pornoqueen@"); $size = round(ftp_size($fp, $path)/1024); ftp_quit($ftp); print "..[$size].."; return "$path [$size kb]"; } ########################################################################### ########################################################################### var $icons_cols = 5; # Spaltenanzahl bei Tabellendarstellung var $icons_border = 0; # border=1 oder border=0? var $icons_name = 1; # Dateinamen darunter anzeigen? var $icons_size = 1; # Dateigröße darunter anzeigen? # # Hübschere Überschrift # (naja, vielleicht irgendwann mal) # Netscape 4.x mag die CSS-Angaben nicht, evtl. hier anpassen (table # mit 100% Breite und Hintergrundfarbe o.ä.) # function h3($text) { return "\n\n

$text

\n"; } # # Ermittelt einfach nur die Größe einer Imagedatei und erstellt einen # "richtigen" img-Link, mit Größenangaben usw. # function img($img, $alt="") { #$root = $this->vars[DOCUMENT_ROOT]; #.$this->vars[DOCUMENT_REL]; $root = $_SERVER[DOCUMENT_ROOT]."/".dirname($_SERVER[SCRIPT_NAME]); if(!file_exists("$root/$img")) return "file [$root / $img] not found"; $size = getimagesize("$root/$img"); $alt = $alt?$alt:$img; #return "\"$alt\""; return sprintf("%s", #macht auf phphp/how-filelists.php unten Probleme! #$this->vars[DOCUMENT_REL]."/$img", $alt, $this->icons_border, $size[3]); "$img", $alt, $this->icons_border, $size[3]); } # # Erstellt ein Icon von der übergebenen Grafikdatei und zeigt Icon + # Grafik als a-href-Gespann an. Wenn das akt. Verzeichnis schreibbar # ist, dann wird das Icon abgespeichert als ".icon-$FILENAME.jpg" und beim # nächsten Mal gleich benutzt. # function icon($filename) { $dir = dirname($filename); $file = basename($filename); $fullfilepath = $_SERVER[DOCUMENT_ROOT]."/".dirname($_SERVER[SCRIPT_NAME])."/".$filename; #$fullfilepath = $this->vars[DOCUMENT_ROOT]."/".$filename; $fulldir = dirname($fullfilepath); #error_log("$filename = $dir + $file [$fullfilepath]",0); $base = ""; #$this-vars[DOCUMENT_REL]; if(eregi("^.icon-", $file)) return ""; if(!file_exists("$fulldir/.icon-$file.jpg") and is_writable($fulldir) and eregi("\.(jpe?g|png|gif|ps|pdf|txt)$", $file)) { $rc = system("/usr/bin/nice /usr/bin/convert -geometry 100x100 \"$fullfilepath\" \"$fulldir/.icon-$file.jpg\" &"); #error_log("/usr/bin/nice /usr/bin/convert -geometry 100x100 \"$fullfilepath\" \"$fulldir/.icon-$file.jpg\" &",0); if(file_exists("$fulldir/.icon-$file.jpg.0") and !file_exists("$fulldir/.icon-$file.jpg")) { rename("$fulldir/.icon-$file.jpg.0", "$fulldir/.icon-$file.jpg"); } system("rm \"$fulldir/.icon-$file.jpg.\"*"); error_log("rm \"$fulldir/.icon-$file.jpg.\"*", 0); } $name = $this->icons_name? str_replace("_", " ", $file) : ""; $size = $this->icons_size? round(filesize($fullfilepath)/1024)." kb" : ""; if($name!="" and $size!="") { $fileinfo = "
$name
[$size]
"; } elseif($name!="") { $fileinfo = "
[$name]"; } elseif($size!="") { $fileinfo = "
[$size]"; } if(file_exists("$fulldir/.icon-$file.jpg")) return "".$this->img("$dir/.icon-$file.jpg", "[$filename]")."$fileinfo"; else { eregi("(...)$", $file, $ext); $ext = strtolower($ext[1]); switch($ext) { case "gif" : case "jpg" : #case "ps" : case "png" : $mime_icon = "image.png"; $url_title = "[Grafik-Datei]"; break; case "pdf" : $mime_icon = "pdf.png"; $url_title = "[PDF-Datei (mit dem Acrobat-Reader öffnen!)]"; break; case ".ps" : $mime_icon = "postscript.png"; $url_title = "[Postscript-Datei]"; break; case "zip" : $mime_icon = "tgz.png"; $url_title= '[ZIP Archivdatei]'; break; case ".gz" : $mime_icon = "tgz.png"; $url_title= '[.tar.gz Archiv - Zum Auspacken von .gz Dateien gucke auf die Hauptseite!]'; break; case "txt" : $mime_icon = "txt.png"; $url_title = "[Text-Datei]"; break; case "tml" : $mime_icon = "html.png"; $url_title = "[HTML-Datei]"; break; case "sdw" : case "sdc" : case "sdd" : case "sxw" : case "sxc" : case "sxd" : $mime_icon = "document.png"; $url_title = "[OpenOffice Dokument]"; break; default : $mime_icon = "document.png"; $url_title = "[Unbekanntes Dateiformat]"; } if($this->copy_ok) { $icon = $this->vars[DOCUMENT_REL]."/pic/_ok_".$mime_icon; } else { $icon = $this->vars[DOCUMENT_REL]."/pic/_icon_".$mime_icon; } return "
\"[$file]\"$fileinfo
\n"; } } # # Erstellt eine Latte von Iconlisten aus Unterverzeichnissen. Übergeben # wird ein Verzeichnisname. Alle Grafiken (jpg,png,gif) werden als # Icons 100x100 angezeigt, alle anderen Dateien mit einem # Standard-Apache-Icon. # function icons($dir) { $ret = ""; $sd = opendir($dir); $ret .= "\n

"; $modc = 0; while($si = readdir($sd)) if($si!="." and $si!=".." and !eregi("^\.", $si)) { $iconliste[] = $si; } asort($iconliste); while($si = each($iconliste)) { $icon = $this->icon("$dir/$si[1]"); if($icon!="") { $ret .= "\n"; $modc++; } if($modc%$this->icons_cols==0) $ret .= "\n"; } $ret .= "
$icon
\n\n"; closedir($sd); return $ret; } function diricons($dir) { $ret = ""; $d = opendir($dir); while($i = readdir($d)) { if($i!="." and $i!="..") { $tmp = $this->icons("$dir/$i"); $ret .= $this->h3(strtr($i, "_", " ")); if($ret=="") return; else $ret .= $tmp; } } closedir($d); return $ret; } } ########################################################################### # Ende - SCHLIESSENDEN TAG NICHT VERGESSEN! # vim:set ts=4 tw=79 nowrap: ?>