Hallo Tom,
na, dich würde jeder Projektleiter gleich wieder achtkantig feuern.
Regeln werden immer von irgendjemand gemacht. Diese hier habe ich festgelegt und wenn mir Leute längere Scripte schicken zur Fehlersuche und haben sich nicht daran gehalten, wird niemand aus unserem Team das Script lesen, geschweige denn Tipps geben.
Alle, die sich bisher daran gehalten haben, freuen sich über die leichte und einheitliche Lesbareit aller Scripte, auch wenn es vom Kollegen kommt.
hmm... also ich gebe immer am anfang meiner Dateien eine ausführliche Beschreibung über ihre Aufrufmöglichkeiten (GET/POST...), was sie macht, wo sie mitmacht und was sie dort macht.
Ich finde es dann wesentlich übersichtlicher, jede Funktion zu dokumentieren. Folgende Datei ist zwar nicht recht kompliziert, ich konnte sie wegen der Längenbeschränkung aber auch nicht in voller Länge abdrucken:
START beispiel2.php
<?php
/* *
* wauwauWebserver 4 Main Include File *
* Aufruf nur über require! *
* */
/* AUFRUF MINIMAL: [text] = Fakultativ
* <?php
* require "..../main.php"; // einbinden
* $site = new site[(Toplocation, [Sublocation])] // Top-/Sublocation = string, >1
* [$site->location(Toplocation, [Sublocation])] // Äquivalent zu initialisation (...) von $site
* [$site->submenu("TITEL", "TEXT)] // Eigenes Submenu...
* [$site->call_submenu(ID)] // ...oder Submenu per ID(int) bequem laden
* [$site->extramenu(INT)] // Zusätzlicher text am ende in der pane
* $site->top(TITEL[, CSS][, SCRIPT]); // siehe top()
* ?>
* TEXT DER SEITE
* <?php
* $site->end([NOSOURCECODE?]); // wenn NOSOURCECODE TRUE ist, wird kein Link zum
* ?> // Sourcecode sehen können gegeben.
*/
class site
/* Globale Site-Class, muss bei jeder requirenden seite
initialisiert werden
Parameter: - Top-Location (>1) - Sublocation (>1) */
{
var $webserver = array(); // ENV-Vars
var $location = array(); // Lokation ("top", "sub")
var $submenu = array(); // Submenu (string)
var $extramenu = false; // Extramenu
var $settings = array(); // Seiteneinstellungen (per Cookie gespeichert)
function site($top=false, $sub=false) // Konstruktor, Vars siehe Klasseninitialisation (:..)
{
// Initialisation von globalen Umgebungsvariablen (meine schönen ;-)
$this->webserver["server_file"] = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"];
$this->webserver["local_file"] = $_SERVER["PATH_TRANSLATED"];
$this->webserver["server"] = 'http://'.$_SERVER["SERVER_NAME"].'/';
$this->webserver["local_root"] = 'e:\homepages\webserver\';
$this->webserver["images"] = $this->webserver["server"].'images/';
$this->webserver["include"] = $this->webserver["local_root"].'librarys\';
if($top && $sub) // Top/Sub-Vars initialisation
$this->location($top, $sub);
/* Design-Vars in globale Var $this->settings speichern.
Wurde noch nicht implentiert. Ansonsten:
cookie mit aufbau "elem=wert&elem=wert&elem=wert&..."
wird in $this->settings["elem"] = wert aufgeteilt, elemnte:
- design = mögliche seitendesigns [modern | classic]
- fontsize = Schriftgröße [int]
- search = Searchpane [visible | hidden | expandable]
- tip = Tip of the WauWau [=>search] */
$standart = 'design=modern&fontsize=medium&search=visible&ad=visible&tip=visible';
$settings = (empty($_COOKIES) ? $standart : $_COOKIES["settings"]);
parse_str($settings, $this->settings);
/* Regeln für Design: Wertigkeit der Einstellungen:
- Standard
- Cookie-Speicherungen
- GET-Sendungen (x-....)
- Einbindene Seiten-einstellungen ($site->my_settings(...);)
NOCH NICHT IMPLENTIERT
*/
if(isset($_GET['x-design'])) $this->settings['design'] = $_GET['x-design'];
if(isset($_GET['x-fontsize'])) $this->settings['fontsize'] = $_GET['x-fontsize'];
if(isset($_GET['x-pane-search'])) $this->settings['search'] = $_GET['x-pane-search'];
if(isset($_GET['x-pane-ad'])) $this->settings['ad'] = $_GET['x-pane-ad'];
if(isset($_GET['x-pane-tip'])) $this->settings['tip'] = $_GET['x-pane-tip'];
}
function kill($str='') //Beendet sofort die Seite, gibt footer und davor $str aus.
{
print $str;
$this->end();
exit;
}
function location($top, $sub) // Locationangabe der Seite
{
$this->location[0] = $top;
$this->location[1] = $sub;
}
function submenu($heading='Undefiniert', $text='<li>Nicht definiert</li>') // Submenü angabe der Seite
{
$this->submenu[0] = $heading;
$this->submenu[1] = trim($text);
}
function call_submenu($id) // Submenü aus Subemnuspeicherungsdatei auslesen
{
// BTW: evv. XML-basiert machen 8]
include_once($this->webserver["include"] . "menu.php");
$this->submenu = site_navigation_specialmenu($id); // returns array with elements 0 & 1
}
function extramenu($text) // Eigenes Extramenü/anderer Text in der Pane.
{
$this->extramenu = $text;
}
function tip_of_the_wauwau($nummer=false) // [INTERNAL] Tip of the Wauwau [nicht von außen aufrufen]
{
$chosentip = ($nummer ? $nummer : (isset($_GET["x-tip"]) ? $_GET["x-tip"] : false));
$datas = file($this->webserver["include"]."tips.txt");
return $datas[($chosentip && isset($datas[$chosentip]) ? $chosentip : mt_rand(0, count($datas)-1))];
}
/* top:
- title = Seitentitel (<title>)
- style = Zusätzliches CSS (style = "stil" =>> "/css/stil.design.css")
- script = Zusätzlicher Script (script = "script" =>> "/scripts/script.js")
/
function top($title="Nicht angegeben", $style=false, $script=false)
{
echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>wauwau Webserver :: <?=$title; ?></title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link rel="start" href="/" title="Portal (Startseite)" />
......"projection,tv" />
<link rel="stylesheet" href="/librarys/css/modern.css" type="text/css" title="Modernes Design" media="screen" />
<? if($style) {
/
Wenn keine Endung angegeben ist (.css|.php) wird die CSS-URI per Design zu Rate
gezogen
/
if(!preg_match("/.css|.php/i", $style)) $style .= '.'.$this->settings['design'].'.css';
print '<link rel="stylesheet" href="/librarys/css/'.$style.'" type="text/css" media="all" />'; } ?>
<script type="text/javascript" src="/librarys/scripts/general.js"></script>
<? if($script)
print '<script type="text/javascript" src="/librarys/'.$script.'.js"></script>'; ?>
</head>
<body>
<div id="head">
<div id="banner">wauwau Webserver</div>
<ul id="navigation">
<li id="n1"><a href="/?portal" title="Zum wauwauWebserver Portal">Portal</a>
<ul>
<li><a href="/?portal">Portal</a></li>
.......
</ul>
<div id="time"><?= date("d.m.Y"); ?></div>
</div>
<div id="pane">
<?php
/ Submenu */
if(!empty($this->submenu))
{
print '<div class="menu">';
print '<strong>'.$this->submenu[0].'</strong>';
print '<ul>'.$this->submenu[1].'</ul>';
print '</div>';
}
/* Extramenu */
print ($this->extramenu ? $this->extramenu : '');
/* Tip of the wauwau */
if($this->settings["tip"] == "visible" || $this->settings['tip'] == 'expandable')
{
print '<div class="tip" title="Tip of the wauwau">';
print $this->tip_of_the_wauwau();
print '</div>';
}
if($this->settings['search'] == 'visible' || $this->settings['search'] == 'expandable')
{
?>
<div class="search">
<strong>Suche</strong>
.......
</div>
<?php
}
print '</div>';
print '<div id="seite">';
}
function end($no_source=false) // $no_source == true dann kein Link zum Sourcecodeviewn
{
?></div>
<div id="foot" class="navigation">
<!--
Endnavigation noch zu <ul> machen!!!!
--->
<div id="endnavigation"><b><br />Endnavigation: <br /></b><a ........ Seite:</strong> <var><?php print $this->webserver["server_file"]; ?></var></div>
</div>
</div>
<div> </div>
</body>
</html><?
}
function print_next($url, $linktext=false, $tooltip=false) // Printet einen Link mit "Weiter"-Pfeil (designspezifisch)
{
print $this->sprint_next($url, $linktext, $tooltip);
}
function sprint_next($url, $linktext=false, $tooltip=false) // Gibt einen Link mit "Weiter"-Pfeil (designspezifisch) zurück
{ // $br not more needed!
return '<div class="next">'.$this->sprint_link($url, $linktext, $tooltip).'</div>';
}
function print_link($url, $linktext=false, $tooltip=false, $newwin=false) // Printet einen Link
{
print $this->sprint_link($url, $linktext, $tooltip, $newwin);
}
function sprint_link($url, $linktext=false, $tooltip=false, $newwin=false) // Gibt einen Link zurück
{
return sprintf("<a href="%s"%s%s>%s</a>",
$url,
($newwin ? " onclick="window.open('$url', 'newwin'); return false;"" : ''),
($tooltip ? " title="$tooltip"" : ''),
($linktext ? $linktext : $url));
}
function print_dictionary($begriff) // Druckt einen WauWauWörterbuch-Link
{
$b = urlencode($begriff);
print '<dfn><a href="/?dictionary='.$b.'" title="" onClick="window.open('/?dictionary='.$b.'', 'DictionaryWindow', 'width=600,height=400,scrollbars=yes,resizable=yes'); return false;">'.$begriff.'</a></dfn>';
}
// sprint_dictionary fehlt!
} // end of class
// EOF
?>
<<ENDE
Das nenne ich übersicht. Überall, wo "......" steht, wurde jenachdem viel oder wenig ausgelassen.
WauWau