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
| $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"; }
#
# 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 "";
return sprintf("
",
#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 "