baseportal
 Start

 Dokumentation


 Templates (Ausgabeseiten)

    Ausgabeseiten sind ganz gewöhnliche Web-Seiten, in denen Sie jedoch bestimmte neue HTML-Befehle, sog. Tags verwenden können. baseportal bearbeitet die Seiten vor der eigentlichen Ausgabe und ersetzt diese speziellen Tags, z.B. durch den aktuellen Inhalt einer Datenbank, durch eine andere Seite oder auch das Ergebnis einer Berechnung.Da solche Seiten also als Vorlagen für die eigentliche Ausgabe dienen, werden Sie auch "Schablonen" genannt, auf Englisch: Templates.

    Beispiel:

    <html></head><title>Highscore</title></head>
    <body bgcolor=ffffff>
    
    <h2>Highscore-Liste</h2>
    
    <include src=einleitung>
    
    <do action=all>
    
    <center>
    <table width=90% border=1>
    <tr><td>Name</td><td>Punkt</td>
    
    <loop sort=- range=0,10>
    <tr>
    <td><b>$Name</b></td>
    <td>$Punkt</td>
    </tr>
    </loop>
    
    </table>
    </center>
    
    </body></html>

    Alle schwarzen Tags sind ganz normale HTML-Befehle.

    Rot = Neue, baseportal-spezifische Tags (Befehle)

    Wie im Standard HTML auch, fangen baseportal-Tags mit dem Kleiner-Zeichen < an und hören mit dem Grösser-Zeichen > auf. Manche Tags stehen alleine, wie <include...>, manche umschliessen einen Bereich, den sie beeinflussen. Das Ende des Bereichs wird dann mit einem zugehörigen abschliessenden Tag markiert, das genauso heisst, wie das Start-Tag, allerdings mit einem vorangestellten Schrägstrich / beginnt, wie z.B. <loop> ... </loop>. Gross/Kleinschreibung ist egal, üblich ist allerdings durchwegs alles klein zu schreiben.

    Blau = Parameter, die die Ausführung der Befehle beeinflussen

    Manche Tags benötigen zusätzliche Angaben, auch Parameter genannt, um ihre Arbeit verrichten zu können, wie z.B. <include src=...>, das den Namen einer Datei braucht, den es an dieser Stelle einfügen soll. Bei anderen Tags sind Parameter nicht unbedingt nötig, sie ermöglichen jedoch die leicht unterschiedliche Ausführung der Befehle, wie z.B. mit einer anderen Sortierung oder mit einer anderen Hintergrundfarbe. Tag und Parameter werden durch Leerzeichen voneinander getrennt, ebenso wie mehrere Parameter untereinander. Achtung: Anführungszeichen werden als Bestandteil des Wertes interpretiert, sie umschliessen nicht, wie in HTML möglich, einen Wert. Also einfach keine Anführungszeichen verwenden...

    Grün = Werte (Variablen), die durch aktuelle Daten ersetzt werden

    Variablen sind einfach Platzhalter, an deren Stelle der eigentliche Wert eingefügt wird. Sie beginnen (wie in der Programmiersprache Perl) immer mit dem "Dollar"-Zeichen $. Es gibt bei baseportal eine Reihe spezieller Variablen, die z.B. die Anzahl der gelesenen Einträge oder den Namen der auszugebenden Datenbank enthalten. Oft bezeichnen sie aber Felder einer Datenbank und enthalten dann für jeden Datensatz den jeweiligen Wert.


 include

    Oft wiederholen sich bestimmte Texte in verschiedenen HTML-Seiten. In baseportal brauchen Sie nicht, wie bisher üblich, in jeder Datei alles zu wiederholen, sondern können diese immer wieder benötigten Texte in einer gesonderten Datei speichern und sie bei Bedarf in anderen Seiten einfügen. Änderungen in der gesonderten Datei wirken sich automatisch auf alle Seiten aus, die die Datei eingebunden haben.

    Definition:

    <include src=Template[Parameter]>

    Beispiel:

    Das Template meineseite enthält folgenden Teil:

    Jetzt kommt die Einleitung:<p>
    
    <include src=head>
    
    Das wars...
    

    Ein zweites Template head im selben Verzeichnis sieht so aus:

    <h2>Schön...</h2>
    
    <i>...dass Sie auf meiner Seite vorbeischauen.</i><br>
    Mein besonderer Dank geht an alle die mich kennen!
    <p>
    

    Wird nun die Seite meineseite aufgerufen, erscheint die folgende Ausgabe:

    Jetzt kommt die Einleitung:

    Schön...

    ...dass Sie auf meiner Seite vorbeischauen.
    Mein besonderer Dank geht an alle die mich kennen!

    Das wars...

    Besonders nützlich ist include natürlich bei Menüs, die ja gewöhnlich immer gleich auf jeder Seite enthalten sind. Um diese in Einzelheiten anzupassen bieten sich Variablen an.


    Verschachtelungen:

    Verschachtelungen sind einfach möglich: Angenommen eine dritte Datei enthält den Befehl...

    <include src=meineseite>

    ...dann wird die komplette obige Ausgabe an der angegebenen Stelle eingefügt. Ebenso kann eine vierte Datei die dritte enthalten usw. baseportal achtet dabei auf unendliche Schleifen (Datei 1 enthält Datei 2, Datei 2 enthält Datei 3 und diese wiederum Datei 1) und bricht diese ab.


    Pfadangaben:

    Verweise auf Templates in anderen Verzeichnissen benötigen Pfadangaben. Diese sind relativ...

    <include src=projekt2/abschluss>

    ...oder absolut möglich:

    <include src=/AxelS/menues/standard>

    Bindet das Template "standard" im Verzeichnis "menues" des Nutzers "AxelS" ein.


 do

    Das Tag do ermöglicht den Aufruf einer bestimmten Funktion. Am wichtigsten ist im Moment die Angabe all - sie übernimmt die komplette Ausgabe einer Datenbank, erlaubt die Suche nach bestimmten Feldeinträgen, überprüft die Zugriffsrechte und stellt, falls erlaubt, das Eingabeformular aus. Dabei ist es durch eine Vielzahl von Parametern steuerbar. So werden z.B. durch den Parameter "language=en" die Texte auf Englisch ausgegeben.

    Hier eine Aufstellung möglicher Parameter


    Definition:

    <do action=Befehl[Parameter]>

    Beispiele:

    Hier meine Adressenliste:<p>

    <do action=all db=adressen sort=-Name border=1 datasize=4>

    Hier werden die Einträge der Datenbank adressen sortiert nach Namen in umgekehrter Reihenfolge ausgegeben (Z zuerst, A zuletzt). Um die Tabelle wird ein Rahmen gezogen und alle Texte haben die Schriftgrösse 4.

    <do action=list listtype=add db=nutzer>

    Gibt das zur Datenbank nutzer zugehörige Eingabeformular aus.

    <do action=input>

    Verarbeitet die Nutzer-Eingaben bezüglich dem Hinzufügen, Ändern und Löschen von Einträgen (wenn die dazu benötigten Rechte vorhanden sind). Wenn Sie diese Angabe nicht machen, werden -trotz erfolgreich abgeschicktem Eingabeformular und korrekten Rechten- keine Änderungen an der Datenbank durchgeführt.

    Ein komplettes Template mit etwas freierer Gestaltung als bei der Funktion all könnte so aussehen:

    <html><head><title>Bug-List</title><head><body>

    <do action=input>

    Wollen Sie etwas hinzufügen? Nur zu:<p>
    <do action=list listtype=add><p>
    <hr size=1><p>

    Die Einträge:<p>
    <do action=list listtype=list databack=ffffff spacing=1 gridcolor=808080 dataface=arial datasize=2 listfields=Titel,Autor,Datum,Stimmen>

    </body></html>

    Eine mögliche Ausgabe:

    ----------------------------- Hier Anfang der Ausgabe ----------------------

    Wollen Sie etwas hinzufügen? Nur zu:

    Titel:
    Beschreibung:
    Autor:
    EMail:


    Die Einträge:

    TitelAutorDatumStimmen
    Link von Datenbank zur Seite geht nichtChristoph BergmannDonnerstag, 13.Juli.2000, 11:46Erledigt
    Passwort funktioniert nichtJo TaikoffMittwoch, 12.Juli.2000, 17:59Kein Fehler

    ----------------------------- Hier Ende der Ausgabe ----------------------


 loop

    Trotz der vielen Einstellmöglichkeiten von do action=all oder do action=list werden Sie in vielen Fällen mit der standardisierten Ausgabeform nicht zufrieden sein: Sie möchten die Ausgabe jedes Feldes selbst bestimmen. loop ermöglicht dies, indem es durch alle Einträge einer Datenbank geht und Zeile für Zeile die einzelnen Felder als Variablen zur Verfügung stellt.

    Definition:

    <loop[Parameter]> ...[$Feldname]... </loop>

    Beispiel:

    <b>Neueste Neuigkeiten:</b>
    
    <loop db=news sort=->
    
    <h3><a href="$URL">$Titel</a></h3>
    <ul>$Text</ul>
    <i>von $Autor</i>
    <p>
    
    </loop>
    

    Dieses Beispiel könnte Teil eines Redaktionssystems sein: loop durchläuft alle Einträge der Datenbank news. Da kein Feld für die Sortierung angegeben wurde, erfolgt die Ausgabe chronologisch - allerdings in umgekehrter Reihenfolge, aufgrund des Minus-Zeichens (sort=-). Die neuesten Einträge kommen also ganz oben, was für ein News-System sicherlich wünschenswert ist.

    Die Variablen mit dem vorangestellten "Dollar"-Zeichen $ entsprechen jeweils dem Namen eines Feldes, so wie sie bei der Datenbank-Definition vergeben wurden (Achtung auf Gross/Klein-Schreibung, diese wird unterschieden!). Wird ein Feldname verwendet, der nicht existiert, wird einfach nichts eingefügt.

    Etwas komplizierter ist der Zugriff auf Felder, deren Namen nicht als Variablennamen verwendet werden können, z.B. "Preis in $" oder "Frage / Antwort". Wegen der Leerzeichen und den Sonderzeichen ("$", bzw. "/") ist eine direkte Abfrage nicht möglich. Stattdessen müssen Sie folgendes schreiben:

    $_loop{"Preis in $"}
    $_loop{"Frage / Antwort"}


    Und so könnte die Ausgabe der News-Seite aussehen:

    Neueste Neuigkeiten:

    Loveparade fällt dieses Jahr aus... Für immer?

      Nachdem letztes Jahr nur noch wenige Hundert hartnäckige Loveparade-Fans auf dem inzwischen nach Pankow verlegten Techno-Umzug erschienen sind, haben die Veranstalter dieses Jahr aufgrund der wiederum geringen Resonanz gleich abgesagt. Motte meint dazu: Endlich Frieden...
    von Anja

    Microsoft am Ende?

      Nach herben Umsatzeinbrüchen hat sich die Führung von Microsoft nun auch noch heillos über die zukünftige strategische Ausrichtung des ehemals so mächtigen Software-Unternehmens zerstritten. Wo wird das alles enden?
    von Hans Albers

    UFOs in Berlin gelandet!

      Echt wahr!
    von Stefan Ehrlich

    (Achtung: Die Nachrichten sind nur Beispiele und NICHT real!! ;-)


 perl

    Jetzt kommt eines der tollsten Features von baseportal... ;-) Was, wenn Sie irgendeine komplexe Funktion brauchen, z.B. Berechnungen ausführen, komplizierte Textoperationen oder Bedingungen und Schleifen: baseportal stellt Ihnen eine komplette Programmiersprache zur Verfügung und zwar nicht irgendeine neu erfundende, sondern Perl, das alles (und noch mehr) bietet, was man zum Programmieren braucht: Variablen, Schleifen, Bedingungen, sehr gute Textbearbeitungsfunktionen usw. usw.

    Darüber hinaus erweitert baseportal Perl um neue Befehle, die den Zugriff auf Datenbanken ermöglichen und die Erstellung von Webseiten erleichtern.

    Der Einbau von Perl in Ihre Seiten erfolgt denkbar einfach:

    Definition:

    <perl[Parameter]> ... </perl>

    Beispiele:

    <b>Das kleine Einmaleins:</b><p>
    
    <perl>
    
    for($i=1; $i<=10; $i++)
    {
    	out "$i * $i = ",$i*$i,"<br>";
    }
    
    </perl>
    

    Wenn Sie bisher keine Programmiererfahrung haben, sieht das vielleicht etwas verwirrend aus, aber keine Angst: Programmieren ist gar nicht so schwer. Das obige Programm durchläuft eine sog. Schleife von 1 bis 10 und errechnet das jeweilige Ergebnis.

    Wichtig: Beachten Sie, dass die Ausgabe mit out erfolgt, anstatt wie in Perl üblich mit print. out ersetzt vollständig die Funktion von print, es gibt bei der Anwendung keine Unterschiede zwischen out und print. print selbst ist nicht erlaubt und erzeugt eine Fehlermeldung.

    Und so sieht die Ausgabe aus:

    Das kleine Einmaleins:

    1 * 1 = 1
    2 * 2 = 4
    3 * 3 = 9
    4 * 4 = 16
    5 * 5 = 25
    6 * 6 = 36
    7 * 7 = 49
    8 * 8 = 64
    9 * 9 = 81
    10 * 10 = 100

    Um mehrere Zeilen auf einmal auszugeben können Sie folgendes schreiben:

    out <<EOF;
    Und hier kommt jetzt ganz viel Text...
    Auch Variablen können verwendet werden: $Text
    Und Leerzeilen:
    
    <b>Und natürlich HTML-Tags!</b>
    usw. usw.
    EOF
    

    Beachten Sie die beiden Kleiner-Zeichen << und den Strichpunkt nach dem EOF. Das zweite EOF muss alleine in einer Zeile stehen, OHNE Strichpunkt am Ende. Alles zwischen den beiden EOFs wird ausgegeben, wobei Variablen durch Ihren Inhalt ersetzt werden.

    Eine ausführliche Beschreibung von Perl würde den Rahmen dieser Dokumentation sprengen, es gibt dazu bereits eine Vielzahl an Büchern oder Anleitungen im Netz, z.B. hat auch Stefan Münz in seinem "selfhtml" einen Abschnitt, der in das Thema einführt: Perl-Sprachelemente (selfthtml)


    Perl-Code in loop

    Sie können auch in der loop-Anweisung Perl-Code verwenden:

    Definition:

    <loop code=perl[Parameter]> ... </loop>

    Beispiel:

    <b>Alles in Gross...</b><p>
    
    <loop code=perl>
    
    out "Nummer: ",++$cnt,"<br>";
    out "Name: ",uc($Name),"<br>";
    out "Strasse: ",uc($Strasse),"<br>";
    out "Ort: ",uc($Ort),"<p>";
    
    </loop>
    

    Für jeden Eintrag der Datenbank wird der angegebene Perl-Code ausgeführt. Die Inhalte der Felder sind über die Variablen mit dem entsprechenden Feldnamen erreichbar. Ausserdem nutzen wir eine Zählvariable ($cnt), die zu Beginn jedes Eintrags die fortlaufende Nummer ausgibt. Die Perl-Funktion uc() wandelt alle Buchstaben in Grossbuchstaben um.

    Hier eine mögliche Ausgabe:

    Alles in Gross...

    Nummer: 1
    Name: AXEL HUBER
    Strasse: WALDWEG 5
    Ort: GRUBING

    Nummer: 2
    Name: GABI BAUMANN
    Strasse: KLINGELGASSE 12
    Ort: FREIBERG

    Nummer: 3
    Name: HANS HELFIG
    Strasse: VIOLASTRASSE 3
    Ort: BINGEN


 Aufruf über Browser (URL)

    baseportal erlaubt eine weitgehende Steuerung nur über die URL. In der Tat können Sie alle Parameter, die in einem Template möglich sind, auch über die URL verwenden. Allerdings hat das Template Vorrang vor der URL-Angabe - ein im Template gesetzter Parameter überschreibt denselben in der URL. Bei Bedarf können Sie diesen Vorrang im Template jedoch auch aufheben.

    Definition:

    http://baseportal.de/cgi-bin/baseportal.pl[?Parameter]

    Beispiele:

    http://baseportal.de/cgi-bin/baseportal.pl

    Ruft die Anmeldeseite von baseportal auf. Es wird die UserId und das zugehörige Passwort verlangt. Ist beides korrekt, gelangen Sie in den persönlichen Bereich.

    http://baseportal.de/cgi-bin/baseportal.pl?uid=UserId

    Ruft die Anmeldeseite von baseportal auf. Die mitgegebene UserId wird als Vorgabe eingetragen.

    http://baseportal.de/cgi-bin/baseportal.pl?htx=/main&mode=regi

    Hiermit gelangt man zur Registrierung von baseportal.

    http://baseportal.de/cgi-bin/baseportal.pl?
     htx=/HansAlbers/termine

    Gibt das Template termine des Nutzers HansAlbers aus. Wird darin eine Datenbank abgerufen, wird dazu die gleichnamige Datenbank termine verwendet, die sich im selben Verzeichnis befinden muss. Existiert diese nicht, wird die Datenbank main genommen. Existiert diese auch nicht, gibt es eine Fehlermeldung.

    http://baseportal.de/cgi-bin/baseportal.pl?
     htx=/HansAlbers/code/gesamt&db=/HansAlbers/Projekt1/lieder

    Gibt das Template gesamt im Verzeichnis code des Nutzers HansAlbers aus. Als Standard für darin verwendete Datenbanken wird lieder im Verzeichnis Projekt1 (ausgehend vom Hauptverzeichnis des Nutzers HansAlbers) verwendet. Existiert diese nicht, gibt es eine Fehlermeldung.


    URL-Parametern Vorrang geben

    Ein im Template gesetzter Parameter überschreibt normalerweise einen gleichnamigen Parameter in der URL. Wenn Sie dies nicht wollen, müssen Sie ein "^" vor das Istgleich-Zeichen "=" setzen. Dies funktioniert mit allen Parametern.

    <action do=all db^=test>

    Setzt die Datenbank auf "test", wenn keine Datenbank über die URL angegeben wurde.


 Datenbank-Abfragen

    Sie können Datenbanken nach beliebigen Kombinationen von Feldinhalten und Bedingungen abfragen. Alle Einträge bei denen das Feld "Name" mit "a" beginnt (gross oder klein), das Feld "Betrag" kleiner als 100 ist und das Feld "VIP" ein "x" ist - kein Problem...

    Definition:

    <Feld><Operator><Wert>[<Verknüpfung>...]

      Feld = Feldname der in der Datenbank definiert sein muss

      Operator = Bestimmt die Art der Übereinstimmung:

        OperatorBedeutung
        ~=Suche Wertanfang; Ignoriere Gross/Klein-Schreibung
        ==Suche exakten Wert; Ignoriere Gross/Klein
        ~=!Suche Wertanfang; Beachte Gross/Klein
        ==!Suche exakten Wert; Beachte Gross/Klein
        < <= <> >= >Suche kleiner, kleinergleich, ungleich, grössergleich, grösser Wert; Ignoriere Gross/Klein
        <! <=! <>! >=! >!Suche kleiner, kleinergleich, ungleich, grössergleich, grösser Wert; Beachte Gross/Klein
        ~<= ~<> ~>Suche kleinergleich, ungleich, grösser Wertanfang; Ignoriere Gross/Klein
        ~<=! ~<>! ~>!Suche kleinergleich, ungleich, grösser Wertanfang; Beachte Gross/Klein
        ~< ~>= ~<! ~>=!Redundant; Dasselbe wie < >= <! >=!

      Wert = Wert nach dem gesucht wird

        Einige Zeichen als Wert haben eine spezielle Bedeutung:

        ZeichenBedeutung
        *Passt auf alles. Es werden also alle Einträge ausgegeben, sortiert nach dem angegebenen Feld.
        #Passt auf den "letzten" Eintrag des angegebenen Felds, z.B. bei den textsortierten Einträgen "a", "b", "c" also das "c".
        ?Passt auf irgendeinen zufälligen Eintrag. Möglich sind die Operatoren "==", "<" und ">".

      Verknüpfung = Art der Verknüpfung der Teilergebnisse:

        ZeichenVerknüpfungBedeutung
        &AND (Und)Nur Einträge die in beiden Teilmengen enthalten sind
        |OR (Oder)Alle Einträge die in einer der beiden Teilmengen enthalten sind
        °NOT (Nicht)Nur Einträge die in der ersten, nicht aber in der zweiten Teilmenge enthalten sind



    Bitte beachten: Sie können nur Abfragen für Felder machen, bei denen Sie in der Datenbank-Definition eine Sortierung ausgewählt haben!


    Beispiele:

    Name~=c

    Liefert alle Einträge, bei denen das Feld "Name" mit "c" (gross oder klein) beginnt.

    Vorname==andrea

    Liefert alle Einträge, bei denen das Feld "Vorname" exakt "andrea" (gross oder klein geschrieben) enthält.

    Alter<30&Stadt==!Berlin

    Liefert alle Einträge, bei denen das Feld "Alter" kleiner als 30 ist UND das Feld "Stadt" exakt den Wert "Berlin" (mit grossem "B" und kleinem Rest) enthält.

    Beruf==Programmierer|Beruf==System-Administrator&PLZ~=1

    Liefert alle Einträge, bei denen das Feld "Beruf" die Werte "Programmierer" ODER "System-Administrator" enthalten UND das Feld "PLZ" mit "1" beginnt.

    Titel>=!d&Titel<!k°Titel~=!h

    Liefert alle Einträge, bei denen das Feld "Titel" mit kleinem "d", "e", "f", "g", "i" oder "j" beginnt.

    Id==?

    Liefert irgendeinen zufälligen Eintrag.


    Aufruf über URL:

    Sie können die obigen Abfragen nun einfach in der URL verwenden:

    http://baseportal.de/cgi-bin/baseportal.pl?
     htx=/urxi/out1&db=test&Name>t&Strasse~=baum+str

    Eine Datenbank-Ausgabe im Template "out1" des Nutzers "urxi" erhält alle Einträge der Datenbank "test", bei denen das Feld "Name" mit einem Buchstaben grösser "t" und das Feld "Strasse" mit dem Wert "baum str" anfängt. Beachten Sie, dass ein Leerzeichen in einer URL mit "+" kodiert wird.


    Aufruf in einem Template:

    Sie können die obigen Abfragen auch als Parameter für baseportal-Tags verwenden:

    <do action=all Rubrik==Krimis or Rubrik==Liebesromane not Sprache==Englisch and Vorhanden==1>

    Gibt alle Einträge aus, bei denen das Feld "Rubrik" den Wert "Krimis" oder "Liebesromane" enthält, das Feld "Sprache" nicht "Englisch" ist und das Feld "Vorhanden" auf "1" gesetzt ist. Sie können das "and" auch weglassen, da es die Standard-Verknüpfung ist:

    <do action=all Firma==Sony Produktart~=tv>

    Gibt alle Einträge aus, bei denen das Feld "Firma" den Wert "Sony" und das Feld "Produktart" mit "tv" beginnt.


    Umgang mit speziellen Zeichen:

    Bei einigen Zeichen gibt es Probleme, wenn sie Teil einer Abfrage sind, z.B. mit dem Leerzeichen, da dieses die Parameter voneinander trennt oder mit dem Grösserzeichen ">", da dieses als Endekennung für Tags dient. Sie müssen deshalb diese "speziellen" Zeichen in Abfragen kennzeichnen, indem Sie ein sog. Backslash "\" voranstellen:

    <loop Name==Hans\ Albers Alter\>18>

    Gibt alle Einträge aus, deren Name "Hans Albers" und das Alter grösser als 18 ist.


 Sortierung

    Know-How: Sortierung (Index-Erstellung)

    Mit der Sortierung hat es folgende Bewandtnis: Natürlich wollen wir unsere Datenbank später auch durchsuchen. Bei vielen Tausend oder sogar Millionen Einträgen würde ein zeilenweises Durchsuchen von vorne bis hinten sehr lange dauern. Zum Glück gibt es einen Ausweg: Die Datenbank sortiert bestimmte Felder vor (man sagt auch, sie erstellt einen "Index" auf die Daten). Egal wie gross die Datenmengen sind, der Zugriff geschieht nun immer sehr schnell. Allerdings hat diese Methode auch Nachteile: Zum einen benötigt man dafür zusätzlichen Speicherplatz und zum anderen muss bei jedem Hinzufügen oder Ändern von Daten neu sortiert werden. Aus diesem Grund sollte man nur Felder sortieren, die man später auch zur Suche braucht.

    Definition:

    sort=[-]Feld[,[-]Feld...]

    Wie bei den Abfragen, können Sie auch nur nach Feldern sortieren, bei denen Sie in der Datenbank-Definition eine Sortierung ausgewählt haben. Beachten Sie den Unterschied zwischen der Sortierung als "Zahl" oder "Text":

        ZahlText
        11
        710
        10115
        1313
        2222
        767
        11576

    Die ungewohnte Reihenfolge bei obiger Textsortierung erklärt sich dadurch, dass Texte zeichenweise verglichen werden und keine Wertigkeit der einzelnen Stellen haben, wie Zahlen.

    Beispiele:

    Ohne Abfragebedingung wird der komplette Inhalt einer Datenbank in chronologischer Reihenfolge ausgegeben (die zuerst eingetragenen zuerst). Mit Abfrage erfolgt die Sortierung nach dem ersten abgefragten Feld:

    <do action=all Name~=ba>

    Gibt die Einträge sortiert nach dem Feld "Name" aus, z.B: "Bachmann", "baller", "Baffke", "Baumann" usw.

    Soll die Ausgabe nach einem anderen Feld sortiert werden, als abgefragt wird, kann dies mit "sort" bestimmt werden.

    <loop Name~=ba sort=Vorname>$Name, $Vorname<br></loop>

    Gibt alle Einträge aus, bei denen das Feld "Name" mit "ba" anfaengt, sortiert nach dem Feld "Vorname", also z.B. "Baffke, Claudia", "baller, jochen", "Baumann, Karen", "Bachmann, Stefan" usw.

    Tip: Soll der komplette Inhalt ausgegeben werden, allerdings sortiert nach einem bestimmten Feld, geben Sie folgendes an:

    <do action=all Name==*>

    Der Stern "*" bedeutet: "Passt auf alles". Es werden also alle Einträge ausgegeben, allerdings sortiert nach dem Feld "Name". Dies ist (vor allem bei grossen Datenbanken) schneller als ein "sort=Name".

    Soll die Ausgabe umgekehrt werden, muss ein Minuszeichen "-" vor der Feldangabe stehen:

    <loop Name~=ba sort=-Vorname>$Name, $Vorname<br></loop>

    Gibt alle Einträge, bei denen das Feld "Name" mit "ba" anfaengt, sortiert nach dem Feld "Vorname", in umgekehrter Reihenfolge aus, also z.B. "Bachmann, Stefan", "Baumann, Karen", "baller, jochen", "Baffke, Claudia" usw.

    Soll der komplette Inhalt, allerdings in umgekehrter Reihenfolge ausgegeben werden, genügt ein "sort=-":

    <loop sort=->$Name<br></loop>

    Gibt alle Einträge in umgekehrter chronologischer Reihenfolge aus

    Dies geht auch in Verbindung mit einer Abfrage:

    <loop Name~=b sort=->$Name<br></loop>

    Gibt alle Einträge, bei denen das Feld "Name" mit "b" anfaengt, in umgekehrter Reihenfolge aus, also z.B. "Baumann", "Baffke", "baller", "Bachmann" usw.

    Sie können auch mehrere Felder bei "sort" angeben. Die Sortierung erfolgt dann zuerst nach dem ersten Feld, dann nach dem zweiten, dem dritten usw.

    <loop Name~=ba sort=Name,Vorname,-Alter>$Name, $Vorname ($Alter)<br></loop>

    Gibt alle Einträge aus, bei denen das Feld "Name" mit "ba" anfaengt, sortiert nach den Feldern "Name", "Vorname" und "Alter" (letzteres in umgekehrter Reihenfolge), also z.B. "Bachmann, Stefan (31)", "Bachmann, Stefan (11)", "Baumann, Arndt (41)", "Baumann, Claudia (42)", "Baumann, Thorsten (32)", "Baumann, Thorsten (7)", "Baffke, Karen (27)", usw.

    Aufruf über URL:

    Sie können alle obigen Beispiele auch in der URL verwenden, z.B.:

    http://baseportal.de/cgi-bin/baseportal.pl?
     htx=/sepperl/adressen&Name==*&sort=-

    Gibt alle Einträge, sortiert nach dem Feld "Name", in umgekehrter Reihenfolge aus (Schneller als ein "
    sort=-Name" !)


 Bereiche

    Definition:

    range=[-]Start[,Anzahl]

    Hiermit können Sie bestimmen, wieviele der passenden Einträge ausgegeben werden sollen.

    Beispiele:

    <db action=all sort=- range=0,10>

    Gibt die neuesten zehn Einträge aus, der neueste Eintrag (der also zuletzt hinzugefügt wurde) zuerst.

    <db action=all Name~=a range=5,4>

    Gibt die 5. bis 9. Einträge aus, bei denen das Feld "Name" mit "a" beginnt.

    <db action=all range=10>

    Gibt alle Einträge, ab dem zehnten bis zum Schluss, aus.

    <db action=all Name==* sort=- range=-20,10>

    Gibt von den letzten zwanzig Einträgen (sortiert nach Name, in umkehrter Reihenfolge) zehn aus.

    Aufruf über URL:

    Sie können alle obigen Beispiele auch in der URL verwenden, z.B.:

    http://baseportal.de/cgi-bin/baseportal.pl?
     htx=/sepperl/adressen&Name==*&range=-18

    Gibt die letzten achtzehn Einträge (sortiert nach Name) aus.


 get

    baseportal stellt spezielle Befehle zur Behandlung von Datenbanken bereit. Sie erlauben den Abruf, das Hinzufügen, Ändern oder Löschen von Datensätzen. Da Sie diese Befehle in Templates einsetzen, die nur Sie verändern können, haben Sie mit diesen Befehlen immer Zugriff auf alle Ihre Datenbanken - unabhängig davon, wie die Rechte dieser Datenbanken gesetzt sind.

    Definition:

    get Abfrage, Datenbank, Ergebnis;

    Alle Felder sind optional. Ohne irgendeine Angabe werden die per URL übergebenen Parameter genommen, fehlen auch diese, wird die gleichnamige Datenbank (wie das Template) komplett gelesen. Die Abfrage entspricht den Datenbank-Abfragen bei "loop", "do" oder über die URL und kann als String oder Referenz auf eine Liste übergeben werden. Datenbank gibt den Namen der Datenbank an. Ergebnis bezeichnet einen "Hash" in dem die resultierenden Datensätze gespeichert werden sollen; standardmässig wird hier der Name der Datenbank genommen.

    Der erste passende Eintrag wird in Variablen, mit den entsprechenden Feldnamen, gespeichert (genau wie bei loop).

    Beispiele:

    get "KundenNr==32631", "adressen";

    out "Name: $Name, Ort: $Ort, Telefon: $Telefon";


    Holt alle Datensätze bei denen "KundenNr" den Wert "32631" besitzt aus der Datenbank "adressen" und gibt den ersten davon aus.

    Hiermit lässt sich ein individueller Zugangsschutz sehr einfach realisieren:

    get "Name==!$namerein", "nutzer";

    if($Passwort ne "" && $Passwort eq $passwortrein)
    {
      # Hier die Ausgabe der eigentlichen Datenbank
      # z.B. mit get_next (s.unten)
    } else
    {
      out "Zugang verboten!";
    }


    Holt aus der Datenbank "nutzer" den passenden Nutzer mit dem per URL oder Formular übergebenen "namerein". Der Wert des Feldes "Passwort" wird dann mit dem ebenfalls per URL oder Formular übergebenen "passwortrein" verglichen. Stimmen beide überein wird z.B. eine Datenbank ausgegeben, wenn nicht, erfolgt die Ausgabe "Zugang verboten!". Achten Sie darauf, dass die Datenbank "nutzer" keinerlei Rechte für Aussenstehende hat!

    Um an mehrere passende Einträge zu kommen, benötigt man einen weiteren Befehl:

    get_next

    Definition:

    get_next Ergebnis;

    Holt den nächsten Datensatz von Ergebnis und speichert ihn in Variablen, mit den entsprechenden Feldnamen. Ohne Angabe von Ergebnis wird die zuletzt abgerufene Datenbank genommen.

    Beispiele:

    get;

    while(get_next)
    {
      out "Name: $Name - Auto: $Auto<br>";
    }


    Holt alle Datensätze der zum Template gehörigen oder per URL übergebenen Datenbank und gibt sie aus.

    Mehrere Abrufe per "get" und "get_next" können verschachtelt werden:

    get "Id==*", "kunden";

    while(get_next("kunden"))
    {
      out "Kunde: $Name<br>";

      get "Name==$Auto", "autos";

      out "Auto: $Name<br>";
      out "Beschreibung: $Beschreibung<p>";
    }


    Hier wurde eine Relation zwischen den beiden Datenbanken "kunden" und "autos" hergestellt. Jeder Datensatz eines Kunden enthält ein Feld "Auto" mit dem Autonamen des Kunden. Dieser Wert wird verwendet, um den passenden Eintrag aus der Datenbank "autos" zu holen und die Beschreibung für dieses Auto auszugeben.

    Sie können auch verschiedene Abfragen derselben Datenbank speichern. Zur Unterscheidung dient der "Ergebnis"-Parameter:

    get "Name~=a", "kunden";

    get "Name~=b", "kunden", "kmitb";

    out "Alle Kunden mit a:<p>";
    while(get_next("kunden"))
    {
      out "Kunde: $Name<br>";
    }

    out "<hr>Alle Kunden mit b:<p>";
    while(get_next("kmitb"))
    {
      out "Kunde: $Name<br>";
    }


    Zuerst werden alle Datensätze, die mit "a" beginnen aus der Datenbank "kunden" geholt und im gleichnamigen Ergebnis gespeichert. Dann werden alle Datensätze, die mit "b" beginnen im Ergebnis "kmitb" gespeichert. Schliesslich werden beide Ergebnisse in entsprechenden Schleifen mit "get_next" ausgegeben.


 put

    Fügt neue Datensätze zu einer Datenbank hinzu.

    Definition:

    put Werte, Datenbank;

    Alle Felder sind optional. Ohne irgendeine Angabe werden die per URL oder einem Formular übergebenen Parameter genommen. Werte geben die zu speichernden Datensätze an und können in verschiedener Form übergeben werden. Datenbank gibt den Namen der Datenbank an.

    Beispiele:

    put ["Name", "Gustav Griebig", "Auto", "BMW"], "kunden";

    Schreibt einen neuen Datensatz in die Datenbank "kunden". Das Feld "Name" bekommt den Inhalt "Gustav Griebig" und das Feld "Auto" den Inhalt "BMW". Die einzelnen Werte geben also im Wechsel den Namen eines Feldes und den darin zu speichernden Inhalt an. Es müssen dabei nicht alle vorhandenen Felder angegeben werden (entspricht einem leergelassenen Feld in einem Formular), auch die Reihenfolge der Feldangabe ist egal (zuerst das Auto, dann der Name geht ebenfalls)

    Man kann damit auch mehrere Datensätze auf einmal hinzufügen, einfach indem man einen Feldnamen, der bereits angegeben wurde wiederholt:

    put ["Name", "Gustav Griebig", "Auto", "BMW", "Name", "Hans Haberl", "Auto", "VW Golf"], "kunden";

    Schreibt zwei neue Datensätze in die Datenbank "kunden" und zwar Eintrag 1 mit Namen "Gustav Griebig" und dem Auto "BMW" und Eintrag 2 mit Namen "Hans Haberl" und dem Auto "VW Golf".

    Aus verschiedenen Gründen ist diese Form für mehrere Datensätze aber nicht sonderlich geeignet. Zum ersten kann es Probleme geben, wenn Felder weggelassen werden und zum zweiten muss man ständig die Feldnamen wiederholen. Besser man verwendet gleich folgende Übergabeart:

    put
    {
      Name => ["Hans", "Gisela", "Thomas"],
      Auto => ["Mercedes", undef, "Toyota"]
    }, "kunden";

    Schreibt drei neue Datensätze in die Datenbank "kunden": Eintrag 1 mit Name "Hans" und Auto "Mercedes", Eintrag 2 mit Name "Gisela" und keinem Eintrag beim Auto und Eintrag 3 mit Name "Thomas" und Auto "Toyota".


 mod

    Ändert bestehende Datensätze.

    Definition:

    mod Abfrage, Werte, Datenbank;

    Alle Felder sind optional. Ohne irgendeine Angabe werden die per URL oder einem Formular übergebenen Parameter genommen. Abfrage entspricht den Datenbank-Abfragen bei "get", "loop" oder "do". Werte geben die zu speichernden Datensätze an und entspricht dem Parameter bei "put". Datenbank gibt den Namen der Datenbank an; wird keine angegeben, wird die zuletzt benutzte verwendet.

    Beispiele:

    mod "Name==!Hans", ["Name", "Stefan", "Auto", "Honda"], "kunden";

    Ändert den Eintrag mit dem Namen "Hans" der Datenbank "kunden": Das Feld "Name" bekommt den neuen Wert "Stefan" und das Feld "Auto" den Wert "Honda". Wenn kein Datensatz mit der Abfrage übereinstimmt, also kein Nutzer mit dem Namen "Hans" existiert, passiert garnichts.

    Nicht angegebene Felder bleiben unverändert:

    mod "Name==!Gisela", ["Auto", "Golf"], "kunden";

    Ändert das Feld "Auto" des Eintrags mit dem Namen "Gisela" der Datenbank "kunden" in "Golf". Der Name "Gisela" bleibt wie er ist.

    Um ein Feld zu löschen muss ein Leertext übergeben werden:

    mod "Name==!Gisela", ["Auto", ""], "kunden";

    Leert das Feld "Auto" des Eintrags mit dem Namen "Gisela" der Datenbank "kunden".

    Es können auch mehrere Änderungen gleichzeitig durchgeführt werden:

    mod "Id==3 or Id==4 or Id==7", { Name => [ "Franz", "Thomas", "Claudia" ], Auto => ["Mercedes", "Chrysler", "Toyota"] }, "kunden";

    Ändert die Einträge mit den Ids 3, 4 und 7 der Datenbank "kunden": Der Eintrag mit der Id 3 wird zu Name=Franz und Auto=Mercedes, der Eintrag mit der Id 4 zu Name=Thomas und Auto=Chrysler und der Eintrag mit der Id 7 zu Name=Claudia und Auto=Toyota. Beachten Sie die Verknüpfung mit or.

    Treffen mehr Datensätze für die Abfrage zu als Sie an Werten zum Ersetzen übergeben, so werden die Werte wiederholt verwendet:

    mod "Name~=s", [ "Auto", "BMW" ], "kunden";

    Ändert das Feld "Auto" aller Einträge, deren Name mit "s" beginnt, auf "BMW".


 del

    Löscht Datensätze aus einer Datenbank.

    Definition:

    del Abfrage, Datenbank;

    Alle Felder sind optional. Ohne irgendeine Angabe werden die per URL oder einem Formular übergebenen Parameter genommen. Abfrage entspricht den Datenbank-Abfragen bei "get", "mod", "loop" oder "do". Datenbank gibt den Namen der Datenbank an.

    Beispiele:

    del "Name==!Hans", "kunden";

    Löscht den Eintrag mit dem Namen "Hans" aus der Datenbank "kunden". Existiert dieser Eintrag nicht, passiert nichts.

    Es können auch mehrere Einträge auf einmal gelöscht werden:

    del "Alter<18", "kunden";

    Löscht alle Einträge dessen Feld "Alter" kleiner als 18 ist aus der Datenbank "kunden".


 do_all

    Durch den Aufruf von "do_all" wird die komplette Ausgabe des Tags <do action=all> erzeugt. Parameter, als auch zusätzliche Werte, die bei den Links erhalten bleiben sollen, können mit übergeben werden.


    Definition:

    do_all Parameter, Werte;

    Beispiele:

    do_all "db=adressen maxlistlength=100", "nutzername=sepp", "passwort";

    Erzeugt die komplette Datenbankausgabe inkl. Reiter etc. für die Datenbank "adressen". Die Länge bei der Listenausgabe wird auf 100 Zeichen begrenzt. Der Parameter "nutzername" wird mit dem Wert "sepp" und der Parameter "passwort" mit dem bereits gesetzten Wert mit übergeben.


 Sonderzeichen

    In jeder Programmiersprache gibt es bestimmte Zeichen, die eine besondere Bedeutung haben. Hier in dieser Dokumenation haben wir bereits das $-Zeichen als besonderes Zeichen kennengelernt - es wird nicht einfach selbst ausgegebenen, sondern steht am Anfang einer Variablen.

    Sonderzeichen ausgeben

    Was, wenn Sie aber statt dem Inhalt der Variablen "test" tatsächlich "$test", also ein $-Zeichen gefolgt von "test" ausgeben wollen? Hierzu müssen Sie das $-Zeichen, das nun ganz normal ausgegeben werden soll, kennzeichnen. Wie in Perl üblich, erfolgt dies mit dem \-Zeichen, auch "Backslash" ("umgedrehter Schrägstrich") oder "Escape"-Zeichen (da sie damit vor der besonderen Bedeutung "flüchten") genannt:

    Inhalt von \$test: $test

    Angenommen die Variable $test enthält den Text "Hallo", dann wird an dieser Stelle:

    Inhalt von $test: Hallo

    ausgegeben.

    Manchmal hat ein Zeichen ganz unerwartet eine besondere Bedeutung, wie z.B. das Leerzeichen. Bei dem Tag...

    <do action=all Name~=a listfields=Name,Strasse>

    ...dient das Leerzeichen als Trenner zwischen den Parametern. Wenn Sie jetzt ein Feld angeben wollen, das ein oder mehrere Leerzeichen enthält benötigen Sie wieder das \-Zeichen:

    <do action=all Name\ oder\ Firma~=a listfields=Name\ oder\ Firma,Strasse>

    Sonderzeichen umwandeln (Konvertierung)

    Wir haben in baseportal mit allerlei Sonderzeichen zu tun, die aus verschiedenen Sprachen und Standards kommen und unterschiedlich behandelt werden müssen. So steht ein &auml; in HTML z.B. für den Umlaut ä und wenn in einem HTML-Text, der selbst von Hochkommas "..." umschlossen ist ein Hochkomma " vorkommt, so muss dieses mit &quot; umschrieben werden.

    Gänzlich anders muss mit Sonderzeichen in einer URL verfahren werden. So darf z.B. kein Leerzeichen darin vorkommen. stattdessen muss dafür ein Plus-Zeichen + stehen. Was aber wenn man nun das Plus-Zeichen + selbst angeben will? Dann muss dieses mit %2b geschrieben werden. Da nun damit das %-Zeichen auch eine besondere Bedeutung hat, muss es mit %25 ebenfalls kodiert werden.

    Perl oder Javascript gehen wieder anders mit Sonderzeichen um.

    baseportal stellt für diese Fälle eine Reihe von Konvertierungsroutinen bereit:

    convert_brWandelt einen Zeilenumbruch in den HTML-Code <br>
    convert_htmlWandelt &, ", <, > und Umlaute (PC) in die HTML-Pendants &amp;, &quot;, &lt;, &gt;, &auml;, &uuml; usw.
    convert_quoteWandelt das Hochkomma ", den Apostroph ' und den Backslash \ in &quot;, \' und \\
    convert_urlWandelt %, \, |, &, ", + in den entsprechenden %xx-Code, sowie das Leerzeichen in ein +

    Beispiel:

    <do action=input>

    <loop code=perl>

    out convert_html($Name)." - ";
    out '<a href="/cgi-bin/baseportal.pl?htx=/name/seite&cmd=del&Id=$_id" onclick="return confirm(\''.convert_quote($Name).' wirklich löschen?\')">Löschen?</a>';
    out "<p>";

    </loop>


    "Entschärft" alle HTML-Spezialzeichen des Feldes "Name" und gibt es, zusammen mit einem "Löschen?"-Link aus. Klickt man auf diesen Link erscheint eine Javascript-Abfrage, ob man dies wirklich will. Sollte der Feldinhalt Apostrophe enthalten, werden diese gewandelt, so dass es zu keiner Javascript-Fehlermeldung kommen kann.


 Variablen

    Variablen sind "Platzhalter" für Werte und werden wie in vielen Programmiersprachen eingesetzt. Einfache Variablen beginnen mit dem $-Zeichen und müssen mit einem Buchstaben beginnen, gefolgt von weiteren Buchstaben, Zahlen oder Unterstrichen (Beispiele: $Text, $Mein_Name, $urx_123). Inhalte von Variablen können beliebig lang sein und aus Zahlen, Texten oder beliebigen anderen Zeichen bestehen.

    Die über eine URL oder in einem baseportal-Tag angegebenen Parameter werden automatisch als Variablen zur Verfügung gestellt.

    Beispiele:

    <perl>
    out "Z&auml;hler: ",$cnt++,"<p>";
    out '<a href="/cgi-bin/baseportal.pl?htx=/zaehler&cnt=',$cnt,'">Weiter';
    </perl>

    Dieses Code-Stück fungiert als Zähler. Jeder Klick auf "Weiter" erhöht die Zahl um 1. Dies geschieht durch die Variable $cnt, deren Wert durch den Parameter in der URL weitergegeben wird und im Template zur Verfügung steht.


    Pfiffig ist der Einsatz von Variablen, um HTML-Bausteine individuell anzupassen:

    <font face=arial,helvetica color=red><h2 align=center>$Text</h2></font>

    Die Variable $Text wird nun mit dem aktuellen Wert ersetzt. Angenommen obige Zeile wird im Template titel gespeichert, so führt der Einbau in eine andere Seite durch...

    <include src=titel Text=Einleitung>

    ...zu folgender Ausgabe:

    Einleitung



    Spezialvariablen

    Eine Reihe von Werten werden von baseportal in Spezialvariablen bereitgehalten. Sie beginnen immer mit einem Unterstrich "_". Obwohl es möglich ist, sollten Sie also auf eigene Variablen, die mit einem Unterstricht beginnen, verzichten.

    Datenbank-Abruf:

    $_dbName der zuletzt genutzten Datenbank
    $_rangeAusgabebereich Start
    $_range_lengthAusgabebereich Anzahl
    $_amountAnzahl Datensätze die beim letzten Abruf tatsächlich geholt wurden.
    $_amount_queryAnzahl Datensätze die beim letzten Abruf ohne "range" geholt worden wären.
    $_amount_allAnzahl Datensätze die in der zuletzt genutzten Datenbank insgesamt enthalten sind.

    Parameter und Abfragewerte:

    %_cgiWerte die über CGI (GET oder POST) mit "=" übergeben wurden
    (z.B. Farbe=Rot)
    %_getWerte die über CGI, in Tags oder über eine Datenbank-Abfrage gesetzt wurden
    (z.B. Farbe=Rot)
    %_selAbfragewerte (z.B. Name==a)
    %_putzu schreibende Werte (z.B. Name:=Hans)

    Durch die "Hashes" %_cgi und %_get können auch Parameter abgefragt werden, die nicht über Variablen zugänglich sind, weil sie für Variablennamen unzulässige Zeichen enthalten (z.B: Leerzeichen, Sonderzeichen usw.) oder weil Sie durch eigene Variablen überschrieben wurden. Beispiele: $_get{"Mein Name"}; $_cgi{"12345"};


 Parameter

    Aussehen:

    border=<zahl>Rahmen, DickeVorgabe=0
    gridcolor=<farbe>/-Gitter, FarbeVorgabe=f0f0f0
    ("-" um Vorgabe zu löschen)
    padding=<zahl>Abstand Inhalt:UmrandungVorgabe=4
    spacing=<zahl>Umrandung, DickeVorgabe=2
    dataface=<font>Datenfeld, Textfont
    datacolor=<farbe>Datenfeld, Textfarbe
    datasize=<zahl>Datenfeld, Textgrösse
    databack=<farbe>Datenfeld, HintergrundfarbeVorgabe=d0d0d0
    ("-" um Vorgabe zu löschen)
    dataalign=left/middle/rightDatenfeld, Ausrichtung
    headface=<font>Feldname, Textfont(Vorgabe=Wert von dataface, falls dieser gesetzt)
    headcolor=<farbe>Feldname, Textfarbe(Vorgabe=Wert von datacolor, falls dieser gesetzt)
    headsize=<zahl>Feldname, Textgrösse(Vorgabe=Wert von datasize, falls dieser gesetzt)
    headback=<farbe>Feldnamen, HintergrundfarbeVorgabe=d0d0f0
    ("-" um Vorgabe zu löschen)
    headalign=left/middle/rightFeldnamen, Ausrichtung


    Sortieren+Bereich:

    <feld>==*Sortierung nach Feld
    sort=-Reihenfolge umkehren
    sort=<(-)feld1,(-)feld2,...>Sortierung erst nach Feld1, dann nach Feld2 usw.
    showsort=<feld1,feld2,../*>Feldnamen mit Link zur Sortierung
    *=Alle Felder, bei denen Sortierung definiert ist
    range=(-)<start>(,<anzahl>)ab Start (bei "-" von hinten), Anzahl (oder bis Ende)


    Blättern:

    showamount=no/all/sel/all,selAnzahl der passenden Einträge: Nicht anzeigen/bei Gesamt, nicht bei Auswahl/bei Auswahl, nicht bei Gesamt/Anzeige Auswahl, Gesamt
    selectbrowse=no/top/bottom(Alles,Neu,Detail ..) Nein/oben/unten/oben + unten
    buttonbrowse=no/top/bottom(>, >> ..) Nein/oben/unten/oben + unten
    pagebrowse=no/(0)top/bottom/top,bottom (1, 21, usw.) ohne reiter/(0 zu beginn=reiter starten mit 0), reiter oben, reiter unten/oben+unten
    indexfield=<feld>Kein Feldreiter/nach Feld (wenn option, dann die werte, sonst: a,b,c..z)
    indexbrowse=no/top/bottom


    Ausgabe:

    listfields=<(-)feld1,feld2..>/#<anzahl>Felder die bei der Listen-Ausgabe in der angegebenen Reihenfolge erscheinen sollen (oder mit - die nicht dort erscheinen sollen)
    #<anzahl> = max. Zahl Felder ausgeben
    allfields=<(-)feld1,feld2..>/#<anzahl>Felder die bei der Detail-Ausgabe in der angegebenen Reihenfolge erscheinen sollen (oder mit - die nicht dort erscheinen sollen)
    #<anzahl> = max. Zahl Felder ausgeben
    formfields=<(-)feld1,feld2..>/#<anzahl>Felder die beim Eingabe-Formular in der angegebenen Reihenfolge erscheinen sollen (oder mit - die nicht dort erscheinen sollen)
    #<anzahl> = max. Zahl Felder ausgeben
    searchfields=<(-)feld1,feld2..>/#<anzahl>Felder die beim Such-Formular in der angegebenen Reihenfolge erscheinen sollen (oder mit - die nicht dort erscheinen sollen)
    #<anzahl> = max. Zahl Felder ausgeben
    keyfield=<feld>Feld das zur Detailausgabe verlinken soll (Vorgabe=erstes Feld)
    listtype=list/all/add/searchAusgabe-Art
    tdparam=<html-code>Zusatz zu den Zellen-<td>'s (z.B. mit "nowrap" - kein Umbruch)
    detail=no/link/linktop/linkbottom/top/bottomDetail-Ausgabe: nicht möglich/nach Link alleine,oben,unten/oben/unten
    search=no/link/linktop/linkbottom/top/bottomSuch-Ausgabe: nicht möglich/nach Link alleine,oben,unten/oben/unten
    input=no/link/linktop/linkbottom/top/bottomEingabe-Formular: nicht möglich/nach Link alleine,oben,unten/oben/unten
    maxlistlength=0/<zahl>Maximale Textlänge bei Listen-Ausgabe. Zeilenumbrüche werden nicht gewandelt.
    0=Zeilenumbrüche bei Listen-Ausgabe nicht wandeln, Länge unbegrenzt
    convert_br=<feld1,feld2..>/-Felder, bei denen Zeilenumbrüche in <br> gewandelt werden
    -=Kein Feld (ohne Angabe alle)
    convert_html=<feld1,feld2..>/*Felder, bei denen HTML-Code in deren HTML-Pendants umgewandelt werden
    *=Alle Felder
    convert_quote=<feld1,feld2..>/*Felder, bei denen ", ' und \ umgewandelt werden
    *=Alle Felder
    convert_url=<feld1,feld2..>/*Felder, die für einen URL-Aufruf gewandelt werden
    *=Alle Felder
    language=en/fr/elAusgabetexte in Englisch/Französisch/Griechisch (Vorgabe=auf Deutsch)


    Abfrage:

    db=<datenbank>Zu bearbeitende Datenbank
    htx=<template>Auszugebendes Template


 Zugriffsrechte

    Prinzipiell geht es nur darum, was Sie unangemeldeten Nutzern erlauben. Sie selbst haben, nachdem Sie sich angemeldet haben, immer alle Rechte an Ihrer Datenbank, ebenso der Programmcode in Ihren Templates: Die dort verwendeten Funktionen können beliebig auf Ihre Datenbanken zugreifen.

    Es gibt 3 Zugriffsarten, die beliebig kombiniert werden können:

    • Lesen
    • Dazufügen (Schreiben)
    • Ändern/Löschen

    Beispiele:

    • Sie können Aussenstehenden keinerlei Rechte geben: Niemand kann dann ohne Zugangsberechtigung auf diese Datenbank zugreifen. Sie dient also z.b. für ihre persönlichen Adressdaten.
    • In den meisten Fällen geben sie Aussenstehenden das Recht, ihre Datenbank zu lesen. Sie sind dann derjenige der neue Daten hinzufügt oder bestehende Daten pflegt. Sie sind also der Redakteur. Anwendungsbeispiele sind ein News-system, eine Linkliste oder eine Produktdatenbank
    • Sie können ihren Nutzern auch zugestehen, selbständig Daten dazuzufügen. Ein Forum wäre dafür die klassische Anwendung. Unliebsame Einträge können Sie, nachdem Sie sich angemeldet haben, einfach löschen.
    • Möglich wäre auch, ihren Nutzern NUR schreibende Rechte zu geben. Z.B. eine Umfrage, in der sie nur Rückmeldungen ihrer Nutzer abfragen wollen, bräuchte diese Einstellung.


 Datum und Zeit

    Einige tausend Jahre Kultur haben ihre Spuren hinterlassen: Auch wenn es uns durch die jahrelange Gewöhnung nicht so erscheint, ist der Umgang mit der Zeit und dem Datum eine komplexe Angelegenheit. baseportal versucht, den Nutzer von dieser Komplexität möglichst wenig spüren zu lassen und gleichzeitig alle Möglichkeiten offen zu lassen.


    Abfrage

    Die Abfrage eines Datums kann auf zwei Arten erfolgen:

    Abfrage nach Datumteilen

    Bei der ersten Möglichkeit muss dem Feldnamen ein Unterstrich "_" vorangestellt, sowie ein "_" und die Angabe des gewünschten Datumteils (Tag, Monat, Jahr usw.) angefügt werden:

    _Datum_Jahr==2000

    Diese Art der Abfrage ist hauptsächlich dafür da, eine Eingabemöglichkeit in einem Formular bereit zu stellen. Hier zwei Beispiele, einmal als Suche mit Pop-Up-Menüs...

    <form action="/cgi-bin/baseportal.pl?htx=/name/seite" method="post" enctype="multipart/form-data">
    <select name="_Geburtstag_Jahr~="> <option>1960<option>1961<option>1962<option>1963...usw.</select>
    <select name="_Geburtstag_Monat~="> <option>1<option>2<option>3<option>4...usw.</select>
    <select name="_Geburtstag_Tag~="> <option>1<option>2<option>3<option>4...usw.</select>
    </form>

    ...oder als Suchabfrage mit Textfeldern:

    <form action="/cgi-bin/baseportal.pl?htx=/name/seite" method="post" enctype="multipart/form-data">
    Tag: <input type=text name="_Geburtstag_Tag~=">
    Monat: <input type=text name="_Geburtstag_Monat~=">
    Jahr: <input type=text name="_Geburtstag_Jahr~=">
    </form>


    Direkte Abfrage

    Wenn Sie die Abfrage selbst kontrollieren, also z.B. in einem "loop"-Tag, beim "get"-Befehl oder über die URL, so ist die zweite Art der Angabe wesentlich bequemer:

    Datum==1.3.2000,20:15

    baseportal ist schlau genug, die verschiedenen Angaben bestmöglich zu erkennen. Hier eine Reihe von Beispielen:

      AbfrageTagMonatJahrStundeMinuteSekunde
      1.Juni.2000,23:45.0916 (Juni)2000234509
      1.12.2000,23:45112 (Dezember)20002345 
      01.06.02,1:0016 (Juni)20020100 
      5.mar.200053 (März)2000   
      02.märz.0123 (März)2001   
      12:57   1257 
      AUGUST.2005 8 (August)2005   
      3.737 (Juli)    
      nov 11 (November)    
      10   10  

    Wichtig sind die Trennzeichen: Der Punkt "." (trennt Tag, Monat und Jahr, sowie Minute und Sekunde), das Komma "," (trennt Datum und Zeit) und der Doppelpunkt ":" (trennt Stunde und Minute).


    Operatoren

    Die Operatoren ~= und == sind gleich bedeutend.

    Während das <-Zeichen genauso arbeitet, wie man es sich vorstellt, hat das >-Zeichen eine auf den ersten Blick andere Wirkung: Die Abfrage...

    Datum>2000

    ...führt nicht dazu, dass alle Einträge ab (und einschliesslich) dem Jahr 2001 ausgegeben werden, sondern alle Einträge ab der ersten Sekunde im Jahr 2000. Zum gewünschten Ergebnis führt folgende Abfrage:

    Datum>=2001


    Abfrage nach dem momentanen Datum

    Mit dem Wert "jetzt" kann nach dem momentanen Datum abgefragt werden:

    Datum>jetzt

    Findet alle Einträge mit einem Datum in der Zukunft.


    "Relative" Abfrage nach Vergangenheit und Zukunft

    Ausgehend vom momentanen Datum können Sie nach Zeitpunkten in der Vergangenheit oder Zukunft abfragen:

    Datum>-14

    Findet alle Einträge die höchstens 14 Tage alt sind.

    Datum<+24:00

    Findet alle Einträge die maximal 24 Stunden in der Zukunft liegen.

    Auch hier erkennt baseportal eine Reihe unterschiedlicher Angaben:

      AbfrageBedeutung
      -7,3:12.117 Tage, 3 Stunden, 12 Minuten und 11 Sekunden in der Vergangenheit
      +100100 Tage in der Zukunft
      -14:0014 Stunden in der Vergangenheit
      +.3153600031536000 Sekunden in der Zukunft (=365 Tage)

    Wichtig sind wieder die Trennzeichen: Der Punkt "." (trennt Minute und Sekunde), das Komma "," (trennt Tag und Zeit) und der Doppelpunkt ":" (trennt Stunde und Minute).

    Achtung: Wenn Sie eine Abfrage, die ein "+"-Zeichen enthält über die URL machen, müssen Sie dieses mit "%2b" umschreiben, da "+"-Zeichen in der URL sonst für Leerzeichen stehen. Eine komplette Abfrage über die URL könnte z.B. so aussehen:

    http://baseportal.de/cgi-bin/baseportal.pl?htx=/name/seite&Datum>-10&Datum<%2b10


    Abfragen nach Datumsteilen

    Abfragen "in die Mitte" eines Datums sind nicht möglich, da dieses immer von "oben" her bearbeitet wird. Die Reihenfolge ist:

    Jahr.Monat.Tag,Stunde:Minute.Sekunde

    In einem "normalen" Datumsfeld können Sie also nicht einfach alle Einträge mit dem Monat "Juni" egal in welchem Jahr ausgeben lassen. Ein Abfrage wie...

    Datum~=juni

    ...ist dennoch möglich - sie liefert jedoch alle Einträge mit Monat "Juni" des aktuellen Jahres.

    Sie können diese Beschränkung jedoch bewusst umgehen, indem Sie eigene Formate definieren.


    Eigene Formate

    Eigenes Eingabeformat

    Sie können bei der Definition des Datumfeldes ein eigenes Format beschreiben. Folgende Angaben sind möglich:

      AngabeBedeutung
      TagTag des Monats (1 bis 31)
      MonatMonat als Zahl (1 bis 12)
      MonatnameMonat als Name ("Januar" bis "Dezember")
      MonatkurzMonat als kurzer Name ("Jan" bis "Dez")
      Jahrvierstelliges Jahr (1920 bis 2019)
      Jahr2zweistelliges Jahr (00 bis 19)
      StundeStunde (00 bis 23)
      MinuteMinute (00 bis 59)
      SekundeSekunde (00 bis 59)

    Alle anderen Zeichen werden unverändert angezeigt. Das Format...

    Tag / Monatname

    ...führt also bei der Eingabe eines Datensatzes oder der späteren Suche zu folgenden zwei Popup-Menüs:

    /

    Aber es hat noch eine weitere Bedeutung: Da das "Jahr" nicht im Eingabeformat enthalten ist, wird es auch nicht mitgespeichert - somit ist eine Abfrage nach Monaten unabhängig vom Jahr möglich:

    Geburtstag~=April

    Liefert damit alle Einträge mit Geburtstagen im April.

    Know-How: Probleme bei eigenen Datum-Eingabeformaten

    Sie müssen hier wissen, was Sie tun, sonst werden Sie über manche Resultate überrascht sein. Vor allem nachträgliche Änderungen des Eingabeformates bei bereits bestehenden Daten können zu Problemen führen: Angenommen Sie haben ein normales Feld mit allen Datumsteilen (Jahr, Monat, Tag etc.) definiert und fleissig Daten eingegeben. Nun ändern Sie das Eingabeformat, so dass nur noch "Monat" und "Tag" enthalten sind - die alten Daten behalten trotzdem Ihr altes Jahr bei, so dass eine Suche nach beliebigen Monaten nur bedingt möglich sein wird.



    Eigenes Ausgabeformat

    Ebenso wie bei der Eingabe können Sie bei der Definition des Datumfeldes ein eigenes Ausgabe-Format beschreiben. Folgende Angaben sind möglich:

      AngabeBedeutung
      WochentagWochentag ("Montag" bis "Sonntag")
      WochentagkurzWochentag kurz ("Mo" bis "So")
      WochentagzahlWochentag als Zahl (1 bis 7)
      TagTag des Monats (1 bis 31)
      Tag0Tag des Monats mit führender Null (01 bis 31)
      MonatMonat als Zahl (1 bis 12)
      Monat0Monat als Zahl mit führender Null (01 bis 12)
      MonatnameMonat als Name ("Januar" bis "Dezember")
      MonatkurzMonat als kurzer Name ("Jan" bis "Dez")
      Jahrvierstelliges Jahr (1920 bis 2019)
      Jahr2zweistelliges Jahr (00 bis 19)
      StundeStunde (00 bis 23)
      Stunde1Stunde ohne führende Null (0 bis 23)
      Stunde12Stunde "analog" (1 bis 12)
      Stunde012Stunde "analog" mit führender Null (01 bis 12)
      MinuteMinute (00 bis 59)
      Minute1Minute ohne führende Null (0 bis 59)
      SekundeSekunde (00 bis 59)
      SekundeSekunde ohne führende Null (0 bis 59)

    Alle anderen Zeichen werden unverändert angezeigt. Das Format...

    Monatname Tag0, Jahr (Wochentag)

    ...würde beispielsweise zu folgender Ausgabe führen:

    Dezember 06, 2000 (Mittwoch)



    Datum schreiben

    Das Speichern von Datensätzen mit Datum erfolgt ähnlich wie bei der Abfrage. Auch hier können Sie die einzelnen Datumbestandteile der Reihe nach angeben:

    put ["_Datum_Jahr", "2000", "_Datum_Monat", "August"];

    Diese Art der Abfrage ist wieder hauptsächlich dafür da, eine Eingabemöglichkeit in einem Formular bereit zu stellen:

    <form action="/cgi-bin/baseportal.pl?htx=/name/seite&cmd=add" method="post" enctype="multipart/form-data">
    <select name="_Geburtstag_Jahr:="> <option>1960<option>1961<option>1962<option>1963...usw.</select>
    <select name="_Geburtstag_Monat:="> <option>1<option>2<option>3<option>4...usw.</select>
    <select name="_Geburtstag_Tag:="> <option>1<option>2<option>3<option>4...usw.</select>
    </form>

    Oder Sie geben das Datum auf einmal an:

    put "Datum:=1.7.2001";

    Um das momentane Datum zu speichern können Sie den besonderen Wert "jetzt" verwenden:

    put "Datum:=jetzt";



    Datum ausgeben

    Sie können die Datumsformate auch bequem im Programmcode nutzen. baseportal stellt Ihnen hierzu die Routine "datum" bereit:

    datum(Zeitpunkt, Format);

    Der Zeitpunkt kann dabei 1. wie bei der direken Abfrage eines Datumsfeldes definiert sein, 2. in Sekunden seit dem 1.1.1970 angegeben werden (Zahl > 100000) oder 3. "jetzt" für den momentanen Zeitpunkt sein.

    Das Format entspricht der Angabe bei der Definition eines eigenen Ausgabeformates. Die Zeile...

    out datum("1.2.00", "Wochentag, Tag.Monatname.Jahr");

    ...gibt folgendes aus:

    Dienstag, 1.Februar.2000

    Die (in Deutschland) gebräuchlichsten Formate können Sie über eigene Namen ansprechen:

      AngabeFormat
      ohne AngabeTag.Monat.Jahr, Stunde:Minute
      langWochentag, Tag.Monatname.Jahr, Stunde:Minute
      kurzTag.Monat.Jahr2, Stunde:Minute
      internJahr.Monat0.Tag0,Stunde:Minute.Sekunde#Wochentagzahl

    Auch hier können Sie die Angabe "jetzt" für den momentanen Zeitpunkt verwenden...

    out datum("jetzt", "lang");

    ...ergibt z.B. folgende Ausgabe:

    Freitag, 8.Dezember.2000, 17:03

    Ebenso sind die relativen Angaben möglich:

    out datum("+10");

    ...gibt das Datum in 10 Tagen in der Standard-Form "Tag.Monat.Jahr, Stunde:Minute" aus.


Zurück zur Homepage


© 2000 baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen