baseportal | ||
Start | ||
baseportal+Miete - Dokumentation |
Aufruf von baseportal | Nach oben |
Es gibt drei verschiedene Arten, wie Sie baseportal über Ihre eigene Domain aufrufen können:
http://domain.de/cgi-bin/baseportal.pl?htx=/domain.de/verzeichnis/seite... |
http://domain.de/baseportal?htx=/domain.de/verzeichnis/seite... |
http://domain.de/baseportal/verzeichnis/seite... |
domain.de steht hierbei für Ihre eigene Domain und kann natürlich auch eine andere Endung (Top-Level-Domain) haben, z.B. domain.com oder domain.net.
Alle drei Aufrufe sind gleichwertig. Beachten Sie, dass bei den ersten beiden Aufrufarten die Domain als baseportal-Nutzername steht.
|
Um in Ihren persönlichen Bereich zu gelangen, rufen Sie einfach folgende URL auf:
http://domain.de/baseportal |
Der Name Ihrer Domain ist gleichzeitig Ihr baseportal-Nutzername.
Formulare unter Ihrer eigenen Domain müssen so aussehen:
<form action="http://domain.de/cgi-bin/baseportal.pl?htx=/domain.de/verzeichnis/seite..." method="post" enctype="multipart/form-data">> <input type=hidden name="htx=" value="/domain.de/verzeichnis/seite"> ... |
Sie müssen also Ihren Domain-Namen beim htx mit angeben.
Für das Form ginge auch:
<form action="http://domain.de/baseportal/verzeichnis/seite?..." ...> |
beim "hidden/htx" muss allerdings der obige Code genommen werden.
Bei den "baseportal pure"-Angeboten müssen Sie die folgende Aufrufart verwenden:
http://subdomain.netpure.de/cgi-bin/baseportal.pl?htx=/subdomain/verzeichnis/seite... |
Um in Ihren persönlichen Bereich zu gelangen, rufen Sie einfach folgende URL auf:
http://netpure.de |
Der Name Ihrer Subdomain ist gleichzeitig Ihr baseportal-Nutzername.
Formulare bei "baseportal pure" müssen so aussehen:
<form action="http://subdomain.netpure.de/cgi-bin/baseportal.pl?htx=/subdomain/verzeichnis/seite..." method="post" enctype="multipart/form-data">> <input type=hidden name="htx=" value="/subdomain/verzeichnis/seite"> ... |
Sie müssen Ihren Subdomain-Namen beim htx mit angeben.
Sie können den genauen Aufruf für ein Formular auch so herausbekommen:
Erstellen Sie irgendeine neue Datenbank (z.B. die Vorlage Adressverwaltung), geben Sie ihr alle Rechte (Lesen, Schreiben, Ändern) und machen Sie ein gleichnamiges Template in dem einfach nur
<do action=all> |
steht. Rufen Sie dieses Template dann auf und klicken Sie auf "Neu", so dass das Eingabeformular erscheint. Wenn Sie sich jetzt den Quellcode der Seite ansehen, finden Sie den Aufruf eines Formulars unter Ihrer Domain.
Soll der Aufruf absolut geschehen, muss der Domainname und "cgi-bin" vor das "baseportal.pl" geschrieben werden - so wie oben angegeben.
Archive | Nach oben |
Sie können bestehende Datenbanken und Seiten die Sie bei baseportal.de erstellt haben einfach in Ihren neuen Zugang unter Ihrer eigenen Domain holen.
Dazu müssen Sie zuerst bei baseportal.de ein Archiv mit den gewünschten Dateien erstellen:
|
Das Archiv wurde nun im ausgewählten Verzeichnis erstellt.
So können Sie das Archiv in den baseportal-Bereich Ihrer eigenen Domain holen:
|
Das Archiv wurde nun in das ausgewählte Verzeichnis übertragen.
Um die Datenbanken und Seiten wieder herzustellen, müssen Sie das Archiv auswählen und dann auf Archiv entpacken klicken. Gleichnamige Dateien werden dabei nicht überschrieben.
Hier können Sie das Archiv auch verschieben, kopieren oder löschen.
Um komplette Datenbestände auf Ihrem lokalen Rechner zu sichern, können Sie Archive herunterladen:
|
|
So spielen Sie ein Archiv wieder vollständig auf:
|
Das Archiv wurde nun in das ausgewählte Verzeichnis übertragen und Sie können es wie oben beschrieben auspacken.
Automatische Backups | Nach oben |
Sie können die Inhalte von Datenbanken automatisch sichern lassen. Diese Option steht Ihnen bei jeder Datenbank unter dem Punkt Verwaltung / Automatisches Backup zur Verfügung.
Sie können -für jede Datenbank individuell- bestimmen, wann ein Backup durchgeführt werden soll. Es gibt vier Stufen:
Das Backup belegt noch einmal soviel Platz wie die Datenbank selbst; sichern Sie deshalb nur Datenbanken bei denen dies auch nötig ist. Bei jeder Aktion sichert die Version vor jedem Schreiben, Ändern oder Löschen: Machen Sie 2 Fehler hintereinander, ohne dies zu bemerken, ist der 1. Fehler schon im Backup. Üblich sind deshalb tägliche Backups.
|
Existiert ein Backup wird Ihnen das genaue Datum mitgeteilt, wann das Backup erstellt wurde. Darunter sehen Sie das Datum der letzten Änderung an der aktuellen Datenbank-Version. Klicken Sie auf Backup wiederherstellen um das Backup als aktuelle Version einzusetzen.
Die aktuelle Version wird dabei gesichert, so dass Sie, falls Sie feststellen sollten, dass Sie doch lieber wieder diese aktuelle Version nutzen wollen, dies einfach rückgängig machen können. Klicken Sie dazu auf Aktuelle Version wiederherstellen. Beachten Sie aber, dass dies nur so lange möglich ist, solange keine Änderung an der Datenbank vorgenommen wird.
Neuer Feldtyp: Datei (File-Upload) | Nach oben |
(Diese Funktion steht bei "baseportal pure"-Angeboten nicht zur Verfügung)
Sie können damit auf einfache Art und Weise den Nutzern Ihrer Datenbank erlauben, Dateien jeglicher Art (Bilder, Sounds, Word-Dateien etc.) in die Datenbank mit aufzuspielen.
Der neue Feldtyp Datei steht bei den Feldern einer Datenbank automatisch zur Verfügung. Ausser einem Namen und ob das Feld sortiert werden soll, brauchen Sie nichts anzugeben.
Bei der Eingabe von neuen Einträgen kann durch Anklicken des Buttons "Durchsuchen" (kann auch anders heissen; der genaue Name hängt vom verwendeten Browser ab) eine beliebige Datei aufgespielt werden.
Bei Änderung eines Eintrags kann die bereits aufgespielte Datei behalten, eine neue Datei aufgespielt oder keine Datei mehr ausgewählt werden.
|
<a href="http://meinedomain.de/files/dateiname">Datei</a> |
Bilder können Sie auch direkt in eine Datenbank-Ausgabe einbauen. Hier ein Beispiel:
<h2>Meine Bildergalerie</h2> <loop> <b>$Titel</b><p> <img src="/files/$Bild" align=left hspace=10>$Beschreibung<p> </loop> |
Bild ist hier als Datei-Feld definiert und enthält bei der Datenbank-Abfrage den Namen der Datei.
Mail-Versand | Nach oben |
Mit den Parametern mail_put, mail_mod und mail_del beim <do action=all> können Sie automatisch Mails bei Neueinträgen, Änderungen oder Löschungen in einer Datenbank verschicken lassen. Diesen Parametern können Sie drei "Typen" zuweisen:
Text | Beschreibung |
---|---|
* | schickt eine Email an Ihre eigene EMail-Adresse, also info@ihredomain.de |
Feldname | schickt eine EMail an die Adresse, die im bezeichneten Feld steht |
xxx@yyy.zzz | schickt eine Email an die angegebene Adresse |
Sie können mehrere Angaben durch Kommas , getrennt machen.
|
Die Anweisung
<do action=all mail_put=redakteur@meineseite.de mail_mod=EMail mail_del=*,EMail> |
verschickt eine EMail an "redakteur@meineseite.de", wenn ein Eintrag hinzugefügt, eine EMail an die Adresse, die im Feld "EMail" steht, wenn der Eintrag geändert oder gelöscht und eine EMail an den Eigner des Templates, wenn ein Eintrag gelöscht wird.
Ein Perl-Befehl erlaubt direktes Versenden von EMails aus Perl:
mail "Empfänger", "Thema", "Text", "Sender", "Empfänger-Name", "Sender-Name", "Kopien", "Blinde Kopien", "Header-Angaben"; |
Thema und Text sollten klar sein. Empfänger ist die EMail-Adresse, an die die Email geschickt werden soll. Wird der Sender weggelassen, wird automatisch die bei der baseportal-Registrierung angegebene EMail-Adresse benutzt. Werden Empfänger-Name oder Sender-Name angegeben, so werden diese bei der Empfänger-, bzw. Sender-Adresse in der Form Name <EMail-Adresse> hinzugefügt. Bei Kopien können Sie weitere Empfänger, die Kopien der EMail erhalten sollen, angeben. Ebenso bei Blinde Kopien, allerdings sind diese zusätzlichen Empfänger für die anderen nicht sichtbar. Bei Header-Angaben können Sie beliebige weitere Angaben machen, die im "Kopfbereich" einer Mail mitgeschickt werden sollen.
|
Die meisten Angaben können weggelassen werden:
mail 'hans@gmx.de', "Na, wie gehts?", "Hallo Hans!!\n\nWollte nur mal fragen, wie es Dir so geht...\n\nGruesse, Christoph..."; |
Die \n im Text sind "Return-Zeichen", an dieser Stelle wird also eine neue Zeile eingefügt.
Hier ein Beispiel mit allen möglichen Parametern:
mail 'kingofpop@jackson.com', "Happy birthday, Jacko!", "<b>Hi Michael!</b>Again one year has passed! Best wishes all around the world and a happy next year!<p>Bla, schwafel...<p><i>Yours, sincerely, Herbie</i>", 'hgroeni@firemail.de', "Michael Jackson", "Herbert Groenemeyer", 'robbie@williams.de, info@madonna.com, matthias@reim.de', 'redaktion@bild.de, info@bunte.de', "Content-type: text/html\n"; |
Dies würde zu folgender EMail führen:
To: Michael Jackson Reply-to: hgroeni@firemail.de Cc: robbie@williams.de, info@madonna.com, matthias@reim.de Bcc: redaktion@bild.de, info@bunte.de From: Herbert Groenemeyer Subject: Happy birthday, Jacko! Hi Michael! Again one year has passed! Best wishes all around the world and a happy next year! Bla, schwafel... Yours, sincerely, Herbie |
Durch die Angabe Content-type: text/html wird die EMail als HTML versandt. Bedenken sollten Sie dabei, dass HTML-Mails von vielen nicht gerne empfangen werden. Sie können mehrere Header-Angaben machen, diese müssen durch \n getrennt werden. Auch eine einzelne Angabe benötigt ein \n am Ende.
Volltextsuche | Nach oben |
Die Volltextsuche durchsucht die komplette Datenbank nach angegebenen Suchtexten, die irgendwo in den Einträgen enthalten sind. Man gibt dazu als Such"feld" den speziellen Namen _fullsearch an. Ansonsten verhält es sich ähnlich wie eine normale Datenbank-Abfrage.
|
Definition:
_fullsearch<Operator><Suchtexte> |
Operator = Bestimmt die Art der Übereinstimmung:
Operator | Bedeutung | Möglicher Treffer bei Suche nach "leben" |
---|---|---|
~~ | Suche irgendwo im Text; Ignoriere Gross/Klein-Schreibung | ES WAR SEHR BELEBEND! |
~= | Suche Wortanfang; Ignoriere Gross/Klein | Diese Lebendigkeit! |
== | Suche exaktes Wort; Ignoriere Gross/Klein | Das Leben ist schön. |
~~! | Suche irgendwo im Text; Beachte Gross/Klein-Schreibung | Das muss man erleben! |
~=! | Suche Wortanfang; Beachte Gross/Klein | Er ist sehr lebending. |
==! | Suche exaktes Wort; Beachte Gross/Klein | Wie kann man so leben? |
Suchtexte = Texte nach denen gesucht wird, durch Kommas getrennt. Diese können durch vorangestellte Zusätze miteinander verknüpft werden.
Zusatz | Bedeutung |
---|---|
+ | muss enthalten sein (UND) |
- | darf nicht enthalten sein (NICHT) |
(kein Zusatz) | bei mehreren: eins davon muss enthalten sein (ODER) |
Beispiele:
<do action=all _fullsearch==+hans,-stefan> |
gibt alle Einträge aus, die auf jeden Fall "hans" enthalten und auf keinen Fall "stefan".
<loop _fullsearch==hans,stefan> ... </loop> |
findet Einträge bei denen "hans" oder "stefan" enthalten ist
Man kann die Volltextsuche auch mit "normalen" Feldabfragen kombinieren:
<loop _fullsearch==+andreas,berta,meyer,meier Alter<30 range=0,20> ... </loop> |
Findet die ersten 20 Einträge in denen auf jeden fall "andreas" UND "berta" ODER "meyer" ODER "meier" enthalten sind und mit ein Alter unter 30 haben.
|
Sie können angeben, in welcher Reihenfolge und nach welcher Sortierung die Suche erfolgt. Im Gegensatz zum "normalen" sort einer Datenbank-Abfrage können Sie hier nur ein Feld angeben.
|
Definition:
fullsearch_sort=[-]Name |
Wenn Sie fullsearch_sort nicht angeben, wird nach den neuesten durchsucht.
Beispiele:
Angenommen Sie haben eine Datenbank in der Texte abgelegt sind, die von den Nutzern bewertet werden können. Sie möchten nun eine Volltextsuche anbieten, die die passenden Texte mit den meisten Punkten zuerst ausgibt.
<loop _fullsearch==$suchbegriffe fullsearch_sort=-Punkte> ... </loop> |
Wenn Sie die automatische Suchreihenfolge nach den neuesten Einträgen umkehren und also nach den ältesten suchen möchten, dann müssen Sie dies so angeben:
fullsearch_sort=Id |
Sie können angeben, welche Datensätze durchsucht werden sollen und so ein "Blättern" ermöglichen.
Definition:
fullsearch_range=[-]<Start>,<Anzahl zu durchsuchende Einträge> |
fullsearch_match=<Anzahl max. Treffer> |
Die Anzahl der zu durchsuchenden Einträge und der Treffer werden auf das Maximum gesetzt, wenn sie mehr als erlaubt angeben. Wenn sie keine Anzahl für die Treffer angeben, so beträgt diese 10.
Beispiele:
fullsearch_range=100,200 fullsearch_match=50 |
sucht in den Datensätzen 100 bis 300 bis 50 Treffer erzielt wurden.
Auch negative Angaben sind möglich:
fullsearch_range=-500,400 |
durchsucht die obersten 400 der letzten 500 Einträge. Die max. Anzahl der Treffer ist standardmässig auf 10 gesetzt.
fullsearch_match=20 |
sucht in den ersten 2500 Datensätzen bis 20 Treffer erzielt wurden.
|
Nach einer Volltextsuche werden folgende Variablen mit Werten gefüllt:
Name | Bedeutung |
---|---|
$_fullsearch | Suchbegriffe |
$_fullsearch_range | Starteintrag für die Volltextsuche |
$_fullsearch_range_length | Anzahl der zu durchsuchenden Einträge (max. 2500) |
$_fullsearch_match | Anzahl der zu findenden Treffer (max. 500) |
$_fullsearch_match_pos | Eine Position nach dem zuletzt gefundenen Treffer |
$_fullsearch_amount | Anzahl der bei der Volltextsuche gefundenen Treffer |
$_fullsearch_regex | Muster um im Text die Suchtexte zu markieren |
So können Sie feststellen wieviel Treffer erzielt wurden und ob die Datenbank schon komplett durchsucht wurde. Hier zwei nützliche Tests:
if($_fullsearch_range+$_fullsearch_range_length<$_amount_all) ... |
Trifft die Bedingung zu, wurde der angegebene Bereich durchsucht, es sind aber noch Datensätze in der Datenbank vorhanden.
if($_fullsearch_match_pos<$_fullsearch_range+$_fullsearch_range_length) ... |
Trifft die Bedingung zu, wurde die max. Anzahl Treffer gefunden und die Suche beim letzten Treffer abgebrochen.
Interessant ist die Variable $_fullsearch_regex. baseportal ist so freundlich und stellt darin das Muster für eine regular expression bereit, mit der die Suchbegriffe in den Einträgen erkannt werden können. Ein passender Suchbegriff steht dann in $1:
$eintrag=~ s/$_fullsearch_regex/+++$1+++/g; |
Stellt vor und hinter alle passenden Suchbegriffe in der Variablen $eintrag drei Plus-Zeichen "+++".
|
Im folgenden ein kleines Suchskript, das auch mit sehr grossen Datenbanken zurecht kommt: Es lässt die ersten 10 Treffer oder max. 2500 Einträge (durch)suchen. Ist die Datenbank dann noch nicht zuende, kann der Nutzer weitersuchen lassen, bis die nächsten 10 Treffer gefunden oder die nächsten 2500 Einträge durchsucht sind.
Zu Beginn ein einfaches Eingabefeld für die Suchtexte. Die Suchwörter sind durch Leerzeichen zu trennen und können "+" und "-" vorangestellt bekommen. Aufgrund des ~~ suchen wir irgendwo im Text, auch mitten in Wörtern.
Zwischen dem
out <<EOF; ... EOF |
steht die Ausgabe eines gefundenen Eintrags. Hier haben wir die Felder "Titel", "Beschreibung" und "Kommentar" verwendet. In der regular expression werden die Suchbegriff fett und rot markiert.
Die Variable $newrange wird auf den Startpunkt der nächsten Suche gesetzt. Dann wird geprüft, ob schon alle Datensätze durchsucht wurden und wenn nicht, warum nicht (max. Treffer gefunden oder Suchbereich zuende). In diesem Fall wird dann ein Link mit den Suchwörtern und dem neuen Suchbereich zum Weiterblättern ausgegeben.
<form action="baseportal.pl?htx=$htx" method="post" enctype="multipart/form-data"> <input type="hidden" name="htx=" value="$htx"> Freie Suche: <input type="text" name="_fullsearch~~" value="$_fullsearch"> <input type="submit" value="Suchen"> </form> <perl> return if $_fullsearch eq ""; get "fullsearch_range^=0,2500 fullsearch_match=10"; while(get_next) { $out= <<EOF; <b>$Titel</b><br>$Beschreibung - $Kommentar<p> EOF $out=~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g; out $out; } my $newrange=$_fullsearch_range+$_fullsearch_range_length; my $txt; if($_fullsearch_match_pos<$newrange) { $txt="Suche nach weiteren Treffern"; $newrange=$_fullsearch_match_pos; } else { out "<b>Kein Treffer.</b><p>" if $_fullsearch_amount<1; $txt="Suche in weiteren Datensätzen"; } if($newrange<$_amount_all) { out "Es wurde noch nicht in allen Datensätzen gesucht: "; out "<a href=\"baseportal.pl?htx=$htx&_fullsearch~~".convert_url($_fullsearch). "&fullsearch_range=$newrange,$_fullsearch_range_length\">$txt</a>"; } else { out "Die Datenbank wurde komplett durchsucht."; } </perl> <br> |
Cookies | Nach oben |
"Cookies" sind Texte und Werte die Sie auf dem Rechner eines Besuchers Ihrer Seiten hinterlassen können und beim nächsten Aufruf wieder abrufen können. Da damit zumindest teilweise das Surfverhalten eines Nutzers zu verfolgen ist (und dies von Bannervermarkter-Firmen wie doubleclick auch fleissig gemacht wird), sind Cookies ein wenig in Verruf geraten. Eine Sicherheitslücke stellen Cookies aber nicht dar und so muss letztendlich jeder selbst entscheiden, ob er Cookies auf seinen Seiten einsetzt oder nicht...
baseportal stellt Cookies ohne weiteres Zutun im Hash %_cookies bereit:
$_cookies{Name} |
gibt den Wert des Cookies Name zurück.
Gesetzt werden Cookies durch den Befehl set_cookies:
Definition:
set_cookies "[*]Cookie-Name=Wert[; expires=rfc-date]", ...; |
Beispiele:
set_cookies "Name=Hans", "Alter=27"; |
setzt das Cookie "Name" auf "Hans" und "Alter" auf "27".
Die Cookies haben eine unendliche Lebensdauer (Um genau zu sein: Bis zum Jahr 2030; falls sie nicht vorher gelöscht werden). Um ein Cookie nur solange zu speichern, solange der Nutzer den Browser geöffnet hat (=eine "Sitzung", engl. Session) muss man einen Stern vor den Cookie-Namen setzen:
set_cookies "*einkaufswagen=2472"; |
setzt das Cookie "einkaufswagen" auf "2472". Beim Schliessen des Browsers wird es automatisch gelöscht.
In ganz seltenen Fällen möchten Sie einem Cookie eine bestimmte Lebensdauer geben: Hierzu müssen Sie das Datum hintan stellen:
set_cookies "Sonderangebot_gekauft=0; expires=Mon, 24 Dec 2001 18:00:00 GMT"; |
setzt das Cookie "Sonderangebot_gekauft" auf "0". Ab dem 24.Dezember.2001 um 18:00 Uhr wird es automatisch vom Browser des Nutzers gelöscht. Das Datum muss in einem genau bestimmten Format vorliegen, sonst funktioniert es nicht. baseportal stellt dieses Format über die Datumsfunktion und den Formatnamen "rfc" bereit. Der obige Aufruf könnte also auch so aussehen:
set_cookies "Sonderangebot_gekauft=0; expires=".datum("24.12.2001,18:00","rfc"); |
baseportal wandelt das angegebene Datum automatisch in das richtige Format.
Neben der Lebensdauer können Cookies beliebige weitere Parameter mitgegeben werden. Wie beim obigen expires müssen diese mit Strichpunkt ; an die Cookie-Zuweisung angehängt werden. Um z.B. ein Cookie nicht nur bei der aufrufenden Seite verfügbar zu machen, benötigt man den Parameter "path":
set_cookies "Nutzer=hans; path=/"; |
Die genaue Bedienung der Parameter erfahren Sie bei Netscape.
Um ein Cookie zu löschen, muss einfach der Cookie-Name ohne Wert angegeben werden:
set_cookies "Besucher="; |
löscht das Cookie "Besucher".
Das folgende Beispiel zeigt einen kleinen "Besucher-Zähler". Es erkennt, wenn ein Nutzer noch nie auf der Seite war und verlangt die Eingabe seines Namens. Dieser wird als Cookie auf seinem Rechner gespeichert, ebenso das Cookie "Besuche" das die Anzahl der Besuche mitzählt.
Um das Ganze zu testen kann man die Cookies auch wieder löschen lassen.
<perl> if($cmd eq "clear") { out "Cookies sind jetzt gelöscht..."; set_cookies "Name=", "Besuche="; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; } else { if($Name) { out "Willkommen $Name!"; set_cookies "Name=$Name", "*Besuche=1"; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; } elsif($_cookies{Name}) { $Besuche=$_cookies{Besuche}+1; out "Hallo $_cookies{Name}, dies ist Dein $Besuche. Besuch!"; set_cookies "*Besuche=$Besuche"; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; out ' - <a href="baseportal.pl?htx='.$htx.'&cmd=clear">Cookies löschen</a>'; } else { out <<EOF; Herzlich Willkommen! Dies ist Dein erster Besuch. Wie heisst Du?<p> <form action="baseportal.pl?htx=/$htx" method="post" enctype="multipart/form-data"> <input type="hidden" name="htx=" value="$htx"> Name: <input type="text" name="Name="> <input type="submit" value="Abschicken"> </form> EOF } } </perl> |
Laufzeit messen | Nach oben |
Neben der fehlerfreien Ausführung eines Programmes ist auch die schnelle und effiziente Ausführung ein wichtiges Kriterium. Wenn Ihr Template zu lange bis zur Ausgabe braucht, sollten Sie die Dauer der einzelnen Programmteile, insbesondere Schleifen prüfen. Hierfür gibt es den Befehl runtime. Dieser gibt die Laufzeit des Programms bis zu dieser Stelle zurück.
Streuen Sie in Ihr Programm alle paar Zeilen, bzw. nach Programmabschnitten folgenden Code ein:
out "Ausführungszeit: ".runtime; |
Damit können Sie die Zeitfresser in Ihrem Programm feststellen - hier lohnt es sich Zeit zur Optimierung aufzuwenden.
© 2000 baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen |