a35- Plattformunabhängige Browser-Oberfläche für allegro-Datenbanken

- Anhang - Allgemeine Fälle von "internen Links" -


Davon gibt es vier:

  1. Eine statische Datei mit Markierungen, sagen wir help.txt
    (Statt .txt ist alles andere erlaubt, solange es eine Textdatei mit geeigneten Markierungen ist). Diese Datei wird abgerufen mit einem Link dieser Form:
    <a href="javascript:reqHelp("help.txt",mode);">Hilfe</a>

    Hierbei ist mode entweder "INF", wenn der Text in jedem Fall im Quadranten INF erscheinen soll, oder "0", wenn der Text Markierungen enthält.

    Beispiele:
    <a href="javascript:reqHelp("a35admin.htm","INF");">Admin-Funktionen</a>
    <a href="javascript:reqHelp('a35kal.htm','0');">Kalender</a>

    Ferner die Dateien a35start.htm , die gleich nach dem Start geladen wird, und a35login.htm

    Test: Die Dateien kann man auch aus dem rot umrandeten Eingabefeld direktabrufen mit
    h a35admin.htm bzw. h a35kal.htm , h a35start.htm , h a35login.htm.
  2. Statt einer statischen Datei xyz.txt kann es genausogut ein PHP-Aufruf sein mit einem oder mehreren Attributen, z.B.
    <a href="javascript:reqHelp('ajax3.php?JOB=kalend','0');">Dieser Monat</a>
    So kann man statt kalend.job auch jeden anderen Job starten, der im Job-Ordner liegt und keine variablen Attribute braucht. Falls es ein ganz bestimmter Monat sein soll, kann man dies auch so machen:
    <a href="...?JOB=kalend&Vuyr=1789&Vumo=9','0');">Sept. 1789</a>
    In beiden Fällen kann man das Laden der Datei auch manuell auslösen. Man gibt in das rot umrandete Befehlsfeld ein:
    h ajax3.php?JOB=kalend&Vuyr=1789&Vumo=9

    Aber dann könnte ja jeder, der Bescheid weiß, mit diesem Trick jeden Job mit jedem Argument starten, z.B. a35del.job zum Löschen eines beliebigen Satzes? Theoretisch ja, praktisch aber nur, wenn er eingeloggt ist, also Schreibberechtigung hat. In jeden kritischen Job baut man dazu nur, meist am Anfang, diese Zeile ein: (z.B. in presto.job)
    perform authent
    und hängt ganz unten den Abschnitt mit der authent-Routine an: (die Variable #uID liefert a35 nach korrektem Login mit!)
    :authent
    var #uId
    if "no" return
    var #dts(0,8) #uID(e"K")
    crypt
    ins #uid
    var #uID(e"K") "K" #uid
    ins #uid
    if #uid = #uID return
    wri "_!_POP Sorry, keine Berechtigung" n
    end

  3. Formulare [meistens im Quadranten INF, aber nicht zwingend]
    Hat man ein Formular konstruiert und soll beim Abschicken ein Job ausgeführt werden, der die ins Formular eingegebenen Daten zu verarbeiten hat, geht man so vor:

    <form id="eingabe" action="javascript:reqForm('verarb','eingabe');">
    ....</form>
    Aufzurufen ist damit der Job verarb.job. Die Funktion reqForm() in a35.js sammelt die Formularfelder ein, deren Namen mit V beginnen, und sendet sie allesamt an ajax3.php, welches dann den Job verarb.job startet und ihm jede Variable Vuxy als allegro-Variable #uxy überreicht und jede Vnnn-Variable als #nnn., z.B. V20 als #20.
    In verarb.job muß man also nichts tun, um sich diese Variablen erst zu besorgen, sie sind schon da. Besonderheit: Die Variablen Vnnn, also z.B. #20, kommen liegen dann im "Objekt 2", d.h. man muß sie sich mit set obj 2 besorgen. Dies ist so, damit man unbesorgt einen Satz laden kann, ohne daß die Vnnn dann überschrieben würden.

    Standardisierte Methodik für den Normalfall
    Beispiel: presto.job oder form1.job erzeugt ein Formular,
    prsave.job verarbeitet in beiden Fällen den Inhalt.
    URL: href="javascript:reqForm('presto','ext');" bzw. mit form1 statt presto

    Nach dem Muster von form1.job kann man sich beliebige Formulare bauen, die man alle mit dem gezeigten Aufruf verarbeiten kann, d.h. man braucht sich dann nicht bei jedem Formular wieder neue Gedanken zu dessen Verarbeitung zu machen.
    Tip: in separatem Browserfenster eingeben
    href=".../ajax3.php?JOB=form1&VurN=satznr;"
    und dann die Quelldaten betrachten, dann sieht man, wie das aktive Formular aussieht. In gleicher Weise kann man meistens außerhalb von a35 prüfen, wie das Ergebnis eines Jobs wohl intern aussieht und ob es formal korrekt ist.

    Sonderfall: Es ist nur der Job auszuführen, ohne eine Variable zu übergeben:
    javascript:reqForm('a35dbi','0'); führt a35dbi.job aus.

    ABER mitgeliefert werden in jedem Fall #uRN mit der aktuellen Satznummer und #urS mit dem letzten Suchbefehl, nach Login auch der Identifikator #uID.
    Frage: Warum ist im Aufruf von reqForm(...) oben der Name des Formulars in der Klammer nochmals anzugeben? Weil dann ein Button oder Link zum Absenden auch außerhalb des Formulars plaziert werden kann. Z.B. kann man zwei oder mehr Buttons für mehr als ein Formular (was der Endnutzer gar nicht immer sehen kann) in einer Reihe nebeneinander anordnen, alle außerhalb der Formulare, zu denen sie gehören. Jeder Button kann einen anderen Job starten und sich auf dasselbe oder ein anderes Formular beziehen.
    Nur kann man nicht die Daten von mehr als einem Formular zugleich absenden.
  4. Externes Fenster aufmachen, um z.B. einen Text außerhalb von a35 erscheinen zu lassen
    Form: href="javascript:extWin(URL);" // oder statt URL ein lokaler Dateiname
    Beispiel: javascript:extWin('a35w.htm');


ein Kapitel zurück zurück zum Inhaltsverzeichnis ein Kapitel vor


[i] zuletzt aktualisiert:
Email: ub@tu-bs.de