Installationspaket a35.zip : http://www.allegro-b.de/download/
a35 : Plattformunabhängige Browser-Oberfläche für allegro-Datenbanken
Struktur, Arbeitsweise, Dateien
2014-02-18 / 2020-04-16
Kurzfassung der Installation
Die ab 2012
entstandene Browser-Oberfläche a35
arbeitet ausschließlich mit den aktuellen Standards HTML5 +
JavaScript im Browser und PHP + allegro-FLEX im Server.
a35 bietet somit für die Oberfläche das heute jedem
Web-Entwickler vertraute Potential von HTML5 mit JavaScript. Sehr
wichtig: Der Endnutzer braucht nichts als einen modernen Browser mit
JavaScript, keine sonstigen Add-ons oder Plugins, also auch nicht
Java.
a35 kann viel mehr als das ältere PHPAC, taugt also als
Ersatz dafür, besonders für Mobilgeräte.
Ziel von
a35 ist es aber auch, eine Web-Oberfläche für das Arbeiten
mit einer Katalogdatenbank zu bieten. Von einem OPAC-System
für Endnutzer wird heute mehr erwartet, als die Indextechnik von
allegro leisten kann; dafür empfiehlt sich die Verwendung
von VuFind
oder anderen Produkten, mit denen man die vielbeschworenen
Qualitäten eines Discovery-Systems realisieren kann.
Zum Design-Konzept: Bei der Arbeit mit einer Datenbank braucht man vier Arten von Information, die oft alle gleichzeitig sichtbar sein sollten, weil sie logisch zusammenhängen:
Datensatz
Metadaten zu einem Objekt (z.B. Buch, PDF-Datei,
Website)
Ergebnisliste geordnete Übersicht der
Ergebnisse einer Suche
Register geordnete Übersichten
von Namen , Titeln, Schlagwörtern etc. zur Auswahl
Menüs,
Formulare… Funktions- und Arbeitsdaten, auch Hilfetexte
Jeder der Bereiche braucht seine
eigenen Schalt- und Eingabeelemente, die ihm jeweils auch optisch
unmittelbar zugehören sollten.
Z.B. die Eingabefelder für
Suchbefehle bzw. Einstiegspunkte im Register sollten Bestandteile
dieser Bereiche sein, ferner Buttons zum Vor- und Rückblättern.
Als einfachstmöglicher Designansatz ergab sich daraus die Aufteilung der verfügbaren Fläche in vier Quadranten: (jeder hat ein internes, dreibuchstabiges Label, wie hier zu sehen)
1 EXT : Datensatz Umschaltbar : "extern"/ "intern" (F5) |
2 INF : Menüs, Formulare, u.a. für jeweils benötigte Aufgaben |
3 ERG : Ergebnisliste mit Eingabefeld für Suchbefehle |
4 REG : Register wie sie für allegro typisch sind. |
Gleich nach dem
Start sieht das so aus: (z.B.
http://www.allegro-b.de/db/demo/a35-pc.php
)
Die gesamte Struktur dieser
Oberfläche steckt in der Datei a35-pc.php,
in der man die Anordnung und alle Einzelheiten leicht modifizieren
kann. Das Menü steht in a35-pc-menu.php,
die übrigen sichtbaren Elemente in a35-pc-cont.php.
Als
Alternative dazu gibt es a35-tab.php,
das sich besser für Tablets eignet, und a35-app.php,
mit dem Smartphones arbeiten können.
Der Kopfbereich ist
jeweils variabel und kann auch für "Corporate Identity"
genutzt werden. Dazu dienen die Dateien a35-head-*.php.
Hier
die Tablet-Variante:
http://www.allegro-b.de/db/demo/a35-tab.php
Und hier die für Smartphones:
http://www.allegro-b.de/db/demo/a35-app.php
Die
rot umrandeten Felder sind gedacht zur Eingabe von Suchwörtern
und Befehlen.
Tip: Mit F2 obere und untere Hälfte
vertauschen, mit F12 die unteren wegblenden.
Für kurzzeitig wichtige Dinge gibt es ein Feld mit dem Label FRE, das bei Bedarf in der nötigen Größe mittig eingeblendet wird, z.B. das Login-Menü a35login.htm: (Aufruf: "Sitzung / Login-Menü")
Analog FRE
gibt es FRL und FRR,
zwei weitere Hilfsfenster, die links bzw. rechts unten
erscheinen.
Warum so und nicht anders? Die Gestaltung
des PC-Modells beruht auf folgenden Überlegungen:
1. In aller
Regel ist das Endergebnis einer Suche ein einzelner Datensatz, d.h.
eine Objektbeschreibung , denn gesucht wird ja zumeist nach ganz
bestimmten, einzelnen Objekten, und jeder Datensatz beschreibt ein
solches. Dafür braucht man ein Anzeigefeld. Es ist links oben,
an der intuitiv i.a. wichtigsten Position.
2. Meistens findet eine
Suche zuerst mehrere Datensätze! Die Ergebnisliste für
die Auswahl aus den gefundenen Sätzen steht darunter, damit für
das Auge der Weg von der Kurzangabe in der Liste zur vollständigen
Angabe möglichst kurz ist, aber beides bequem im Blick bleiben
kann.
3. Das Register als Hilfsmittel zur Bildung von Ergebnismengen
steht aus demselben Grund direkt rechts neben dem Ergebnislistenfeld.
4. So bleibt der Bereich rechts oben übrig für Menüs und
Formulare. Bei Bedarf eingeblendet wird ein Menüfenster unten
rechts, z.B. für die Volltextsuche oder kombinierte Suche.
In
den einzelnen Bereichen (außer REG) kann man, unabhängig
voneinander, zu den vorher dort erschienenen Anzeigen zurückblättern
(mit den Buttons [<] und [>] ).
Wichtig: Sowohl
der Datensatz wie auch Hilfetexte und Formulare können recht
lang werden, wobei man gern möglichst viel davon im Blick hätte.
Daher sind diese zwei Quadranten oben angeordnet, und mit F12
kann man die beiden unteren Quadranten schnell mal wegblenden, um
mehr von den oberen Inhalten zu sehen. Mit F2 dagegen kann man
auch jederzeit oben und unten vertauschen, wenn man dies intuitiv
besser findet. Dann ist alo die Ergebnis-Kurzliste links oben, die
Anzeige des ausgewählten Satzes darunter.
Bei jeder
Größenänderung des Browserfensters passen sich die
Quadranten automatisch an.
Die Anordnung und Gestaltung der
Quadranten ist trotz alledem, da mit HTML5 + CSS realisiert, vom
Anwender für eigene Anpassungen in a35-pc-cont.php
modifizierbar.
Ferner könnte man an der linken und/oder
rechten Seite noch Bereiche für Navigation o.a. einbauen.
Die PHP- und FLEX-Skripte für
alle Varianten sind weitgehend dieselben, denn es handelt sich im
wesentlichen um geänderte Präsentationsformen der
Oberflächenelemente: die vier „Quadranten“ der
Standardversion werden hierbei nicht gleichzeitig sichtbar, sondern
unter Tabs bzw. in einem „Accordion“ angeordnet; man
sieht dann jeweils nur den Inhalt eines Quadranten. Die
Umschaltung erfolgt an vielen Stellen im Ablauf automatisch,
ansonsten durch Mausklicks auf die Tabs.
Die vier "Quadranten"
der PC-Variante sind hierbei inhaltlich unverändert unter den
Tabs zu finden.
Die Tablet-Variante hat noch ein zusätzliches
Tab namens "Hilfe" hat, sein Label ist HLP.
Technisches Konzept: a35
bietet einen Kernbestand von allgemeinen und universellen JavaScript-
und PHP-Funktionen, die unverändert für jede Datenbank zum
Einsatz kommen können. Spezifische Einstellungen werden in der
Datei ajax4ini.php vorgenommen
(weitgehend von PHPAC
übernommen). Einige wenige Export-Parameterdateien sind nötig;
für die A-Konfiguration werden sie bereitgestellt (Dateityp
.apr) und können
modifiziert werden. Sie gehören aber in den Ordner der
Datenbank, nicht zu den HTML-Dateien.
Neue Funktionen
bindet man auf standardisierte Weise ein, wobei normalerweise keine
Kenntnisse in JavaScript und PHP benötigt werden, FLEX-Jobs aber
unentbehrlich sind – schließlich kann man anders gar
nicht auf die Datenbank zugreifen. Mehr dazu im Anhang.
Auch die
Standard-FLEX-Jobs für die Zugriffe zur Datenbank können
geändert und erweitert werden, d.h. man muß auch die
Standards nicht als unabänderlich hinnehmen.
Dateien
des Standardumfangs (rot:
datenbankspezifische Inhalte! Kommentare beachten.)
Zunächst
diejenigen, die auf dem Startverzeichnis zu liegen haben (Typen
.php und .htm)
Hinweis:
Auf den letzten zwei Seiten eine komprimierte Kurzübersicht zum
Thema Installation.
a35-pc.php bzw. die Varianten-tab.php
für Tablet und -app.php
für Mobil
kann zugleich als Beispiel einer Startdatei und Vorlage für eigene Gestaltungen dienen
lädt aus a35-pc-menu.php das Menü und aus a35-pc-cont.php die Oberfläche, wie sie beim Start aussehen soll. Das Layout verändert sich während der Laufzeit nicht, sondern wird dynamisch mit Inhalten gefüllt (AJAX-Prinzip). Dazu sind die Labels wichtig.
lädt nach dem Start zuerst die Datei a35start.htm, die man beliebig ändern kann, um zu Beginn in den vier Quadranten sinnvolle Dinge erscheinen zu lassen, z.B. auch Bilder.
zeigt an Beispielen, wie geeignete Links bzw. Formulare konstruiert sein müssen; diese rufen als action die JavaScript-Funktion reqLoad()oder reqForm() auf, zu finden in a35.js
Die Datenbank muß registriert sein in avanti.con (liegt im Programmordner bei avanti und acon)
Einstellungen für den Zugriff zur Datenbank in a35ini.php, die Menüzeilen stehen in a35-*-menu.php
Formularelemente, deren Inhalte an einen Job übergeben werden sollen, müssen je ein Attribut id der Form id="Vuxy"bzw. id="Vnnn" haben, xy beliebige Zeichen (daraus wird im Job dann die Variable #uxy bzw. das Datenfeld #nnn )
Ferner: Mit id="Dxyz" kann man Inhalte in Formulare einbauen, die dann im Job als Variable $xyz auftauchen
Oberflächenelemente, in die per FLEX-Job etwas geschrieben werden soll, müssen ein id haben mit einem 3stelligen großbuchstabigen Label, z.B. id="ABC". Die Funktion receivE() erledigt dann das Einfügen des auf _!_ABC folgendenTextes (beliebiges HTML) in dieses Element, d.h. man braucht sich darum nicht einzeln zu kümmern und kann sofort neue Labels einführen und in die PHP-Dateien einbauen. Siehe unten Bemerkungen zu a35erg.job usw.
Die Funktion reqForm() übergibt via ajax4.php?JOB=... an acon den Jobnamen sowie die Variablen aus dem Formular mit &Vuxy=... bzw. &Dxyz=...
a35 braucht einige JavaScript-Funktionen, mit denen ein FLEX-Job aufgerufen und dessen Ergebnisse verarbeitet werden können, u.a. receivE(). In diesen Funktionen sind evtl. Eingriffe sinnvoll. Die universellen Funktionen findet man in ../scripts/a35.js.
Allgemeines CSS für a35 ist gesammelt in ../scripts/a35css.php. (!)
Alle allgemeingültigen Jobs liegen in ../scripts/jobs
Benötigte Dateien aus der jQuery-Bibliothek mit zugehörigem CSS liegen auch dort (jquery-min.js = notwendige jQuery-Funktionen)
Alle datenbankspezifischen Jobs müssen in einem Unterverzeichnis $Jobdir liegen, anzugeben in ajax4ini.php (s.u.)
a35erg.job,
um ein Beispiel zu nehmen,
wird wie jeder .job über das Skript ajax4.php gestartet und steckt auch hinter dem roten Eingabefeld; seine Aufgabe ist das Bilden und Anzeigen von Ergebnismengen.
erhält vom ajax4.php die Variablen: aus Vuxy wird im Job #uxy, aus Dname wird $name, d.h. im Job hat man diese Variablen ohne eigenes Zutun zur Verfügung, ferner #uIP mit der IP-Nummer des Browsers und #uID (codiertes Passwort) wenn der Nutzer sich vorher eingeloggt hat.
produziert Output mit write- und export-Befehlen). Dieser Output ist eine lange Zeichenfolge, die durch Labels _!_ABC gegliedert ist.
Ein solches Label ist _!_ERG und adressiert das Element id="ERG" im aufrufenden HTML-Code, also hier a35-pc.php: Der auf _!_ERG folgende Text kommt bis zur nächsten Markierung _!_ in das betr. Element (Quadrant 3). Das erledigt die universelle Rückkehrfunktion receivE() in a35.js. Für eigene Erweiterungen kann man hier auch noch Sonderbehandlungen einbauen (im Abschnitt unter switch(Label) ).
Weitere wichtige Jobs [Diese Sammlung wird weiter ausgebaut. Die mit den schwarzen Dateinamen liegen in ../scripts/jobs, weil sie für alle Datenbanken funktionieren.]
a35ind.job
zeigt einen Registerauszug in Quadrant 4 bzw. unter Tab 4
(Label _!_REG)
a35get.job
besorgt einen Datensatz und zeigt ihn in Quadrant 1
(Labels_!_EXT/_!_INT)
(ACHTUNG:
Hierin können lokale Anpassungen nötig sein für
die Präsentation, Verlinkung z.B. zum WorldCat, Google
Booksearch u.a.) Eingebaut ist auch, daß der angezeigte Satz
zum Editieren oder als Kopie für einen neuen Satz bereitgestellt
werden kann, oder auch zum Löschen. Alles unter Voraussetzung
der Schreibberechtigung, s. a35id.job)
Unter
dem Label _!_INT kann dieser
Job zusätzlich eine andere Darstellung des Datensatzes liefern;
normalerweise die interne, kategorisierte Form, die dann mit F5 im
Quadranten 1 sichtbar wird.
a35admin.htm
Ausbaufähiges Menü mit Admin-Funktionen, zum Aufruf
einiger der folgenden:
a35id.job
Login etc. (alle Funktionen, gestartet über
a35admin.htm )
a35gre.job
Globale Ersetzungen (analog zu a99, aber als Job für
acon eingerichtet)
a35findf.job/a35find.job
Experten-Suchmenü aufmachen / Suche ausführen
presto.job
Aktuellen Datensatz zur Bearbeitung bereitstellen,
Internformat
form1.job
denselben Satz in einem selbstgestalteten Formular
bereitstellen (nur als Beispiel)
prsave.job
Speicherung des bearbeiteten Satzes (gilt für jedes
solche Bearbeitungsformular)
a35del.job
den aktuellen Satz aus der Datenbank löschen
a35org.job
Index erneuern etc. ,wie in a99 (Eingeben:
h a35org.htm )
a35par.job
Eine Parameterdatei auswählen, bearbeiten und
zurückspeichern
a35bat.job
Eine Batchdatei ausführen lassen (Eingeben:
h a35bat.txt )
a35sperr.job
Den aktuellen Satz oder die Satztabelle sperren
srugbv.job
Einen Fremddatensatz vom GBV per ISBN abrufen (nur mit
A.CFG)
JavaScript
a35.js liegt in ../scripts
enthält die universellen JavaScript-Funktionen, die man in jeder HTML5-Datei braucht. Eingriffe sind nicht nötig. Für a35 entscheidend:
reqLoad() : Aus einem Hyperlink einen Satz laden
reqRes(): Eine Suchanfrage ausführen lassen
reqInd(): Einen Registerabschnitt anzeigen lassen
reqJob(): Einen Job ausführen
reqDJob(): desgl., aber die Jobdatei liegt auf DbDir/jobs
reqForm()
: Aus einem Formular einen Job starten (s. a35-pc.php : <form
id=… )
(entnimmt alle
V- und D-Variablen des Formularsund liefert sie an den Job)
receivE() : Verarbeitet den Datenstrom, den eine AJAX-Anfrage liefert (also ein Job)
ajax4.php + ajax4ini.php[+ a35alf.js ] (das letzte nur für OPAC mit Ausleihe)
ist ein universelles Skript, das selber nichts ausgibt; es
startet einen Job, z.B. a35get.job, dessen Name ihm mit ?JOB=… übergeben wird, und
reicht die Variablen Vuxy bzw. Dname an diesen Job weiter. Sie kommen im Job als #uxy bzw. $name an.
Was der Job mit write- und export-Befehlen ausgibt, sendet nach seinem Ende ajax4.php als Ganzes weiter an den Browser, d.h. allein der Job produziert den Output, und zwar mit den Befehlen write und export.
Der Output geht an die Funktion receivE() in a35.js : Diese zerlegt den Output und stellt die Daten in die Felder mit den zugehörigen Labels ("ERG" usw.)
In ajax4.php braucht man nicht einzugreifen. Nur in ajax4ini.php sind einige Angaben zur Datenbank nötig (dieselben wie bei PHPAC in av_ini.php).
$Jobdir="abcjobs/";
sonst werden die Jobdateien direkt im HTML-Ordner gesucht. Nachteil: dort wären sie von außen sichtbar. Um sie gegen direkten Lesezugriff zu sichern, richtet man eine .htaccess mit entspr. Inhalt im $Jobdir-Ordner ein, desgl. im ../scripts-Ordner.
Parameterdateien (evtl.
spezif. f.d. Datenbank und deren CFG)
(im Datenbankordner,
z.B. c:\allegro\demo2 ,oder
wo acon liegt, z.B.
c:\allegro!)
d-html.apr : Anzeigeparam.; Name in ajax4ini.php setzbar. Verwendet in a35get.job
a35erg.apr
: Für die Ergebnis- bzw. Volltext-Kurzliste (die im Quadrant ERG erscheint)
(Verwendung in a35erg.job und a35fts.job)
e-unihtm.apr, e-unicod.apr, utf.apr: Umcodierungsparameter
ad-utf.apt,
ad-htm.apt, d-htm.apt, ucodes.apt : Umcodier- und
Hilfstabellen
Berechtigungen:
Voraussetzungen, Nutzer, Passwörter
für die
Schreib-Berechtigung. Im Menü „Sitzung“ findet man
„Login-Menü“, damit wird die Datei a35login.htm
geladen. Diese zeigt 4 Buttons: [Identifizieren],
[Registrieren], [Passwort ändern] und [Logout]. Jeder startet
das Skript a35id.job, in dem
alle diese Funktionen versammelt sind. Wichtig sind dann folgende
Punkte:
Voraussetzung: Der User, der avanti gestartet hat, besitzt Schreibrecht im Datenordner, und für die in ajax4ini.php mit $ID=… definierte Kennung besteht in avanti.con eine Berechtigung >0. Diese Kennung muß nichts zu tun haben mit den a35-Nutzern:
An den Datenordner hängt man einen Ordner users
Darin legt der Admin für jeden User xyz (frei wählbarer Name ohne Leerzeichen) eine Datei xyz an, in der zunächst nur *** steht. Soll der User Admin-Rechte haben, ist eine Zeile zu ergänzen, in der nur "admin" steht. Er kann damit per Browser neue User zulassen (s.u.) .
Den Namen xyz teilt der Admin nur dem User mit, der im System xyz heißen soll
Der Nutzer xyz kann sich dann sofort registrieren: „Sitzung / Login-Menü“, dann auf den Button [Registrieren] und die Eingaben tätigen. Dann wird *** ersetzt durch das eingegebene, aber codierte und nicht entschlüsselbare Passwort.
Danach kann sich der Nutzer jederzeit mit dem Namen xyz und dem selbstgewählten Passwort identifizieren und erhält bis zum Sitzungsende Schreibrecht. Die "Sitzung" endet mit dem Abschalten des Browsers oder dem Ende des Tages oder der Funktion „Logout“, je nachdem, was zuerst kommt.
Besteht Schreibberechtigung, setzt
a35get.job über die
Datenanzeige drei Links: "Edit - Copy - Delete". Diese
starten presto.job bzw.
a35del.job. Der presto.job
erzeugt ein Bearbeitungsformular im Feld INF
. Das Formular hat nur ein einziges Eingabefeld, in dem der ganze
Satz mit allen Feldern steht - wie beim alten Programm PRESTO.
Darüber ein Button [Speichern], und das besorgt das Skript
prsave.job. Analog zu
presto.job kann es andere
Skripte geben, um selbstgestaltete Formulare einzurichten, wobei alle
Möglichkeiten von HTML5 ausnutzbar sind. Als Muster wird
form1.job
mitgeliefert, darin Kommentare zur Methodik.
(Es existiert jedoch
ein wesentlich komfortablere Methode, die mit freeform.job
arbeitet.)
Der Admin holt sich mit Eingabe von
h a35admin.htm (in das rote
Eingabefeld) ein Menü, auf dem eine Funktion [New User] ist. Die
neue Userdatei im Ordner users
wird dabei von a35nwu.job
angelegt.
Grafikdateien [alle durch
eigene austauschbar]
Standard: Nur close.png,
up.ico, down.ico zum Schließen eines Hilfsfensters
(_!_FRE und_!_
FRR) bzw. Blättern nach oben und unten im Index. Ferner
a10.png ganz oben links.
Nur
optional: gbs.png, wcat.png. Diese
kann man in die Anzeige von Datensätzen einbauen, wie es
in a35get.job zu sehen ist,
um eine Verlinkung zur Google Buchsuche bzw. zum WorldCat
bereitzustellen. Ansonsten können überall beliebige
Grafikelemente zum Einsatz kommen, weil man alle Möglichkeiten
von HTML nutzen kann. Eine Anzahl von .gif-
und anderen Grafikdateien werden von den Varianten a35-app.php
bzw. a35-tab.php
verwendet.
Wenn man in a35ini.php die Varianten für
„Corporate Design“ einschaltet (a35_head_pc1.php
etc.), kann man mit eigene Grafiken das Erscheinungsbild
individualisieren.
aLF : allegro-LeihFunktionen [nur mit A.CFG]
Diese wurden aus PHPAC übernommen und für a35 angepaßt. Notwendige Dateien:
Konto, Verlängerungen[genau wie in PHPAC, dieselben Dateien]
a-okonto.htm
: Aufruf vom Menü „Sitzung / Ausleihkonto“
oder aus eigenem HTML mit dem Link <a
href="javascript:extWin('a-okonto.htm');">Konto</a>
Öffnung
in externem Fenster, nicht in a35! Enthält die
JavaScript-Funktionen zum Ausführen der Routinen, dieselben wie
für PHPAC: insbes. req(X)
zum Ausführen der Funktion X.
Zuerst erscheint ein Dialog
zum Eingeben von Nutzername + Passwort, dann kommt
a-okonto.php : Start von a-okonto.job, Präsentation im externen Fenster:
a-okonto.job : Erstellung des Kontos und Ausgabe ins externe Fenster, wobei z.B. der Link „Verlängern“ die Funktion req('v') auslöst.
a-overl.php
: Start der Verlängerungsfunktionen
a-overl.job
: Ausführung der Funktionen
Vormerkung
d-khtm.apr : Anzeigeparameter; Zeigt einen Link „Vormerken“, wenn alle Exemplare verliehen.
a35alf.js : Funktion vorm() wird bei Klick auf „Vormerken“ ausgelöst; Fragt Nutzername+Passwort ab und startet dann a-ovorm.job
a-ovorm.job : Führt die Vormerkung aus und liefert Rückmeldung an a35
Volltextsuche
Diese Methode wurdefür a35 neu geschaffen.
a35fts.htm : Macht das Hilfsfenster FRR auf und zeigt darin den Dialog zum Eingeben des Suchbefehls, genauer: eines „Regulären Ausdrucks“. (Zusätzlich ein Button zum Auslösen der normalen ALL-Suche mit derselben Eingabe.)
a35fts.job : Erstellt a35fts.bat auf dem DbDir (!), das Skript (Batch bzw. Shell) zum Start des Programms srch mit den nötigen Optionen; es benötigt a35fts.apr und produziert damit (ebenfalls im DbDir) die Datei
fts.erg : Fertige Ergebnisliste mit Link für jeden Datensatz, der mit a35get.job den Satz ganz normal in a35 hineinholt. Anzeige der Liste im Quadranten ERG.
a35fts.apr : Parameter zum Erstellen der Kurzliste aus srch heraus, d.h. nicht aus einem Job.
fts.htm : Hilfetext zur Volltextsuche mit regulären Ausdrücken (kommt bei Klick auf [Help]).
ANHANG für Entwickler und Admins
"Interne Links" in a35: Konstruktion
Ein
"interner Link" ist dazu da, Daten vom Server abzurufen
(sog. AJAX-Technik), die dann im a35-Fenster an bestimmten Stellen
erscheinen sollen. (Das Fenster selbst wird während einer
"Sitzung" nicht neu geladen, sondern immer mit dieser
Methodik intern mit neuen Daten gefüllt.)
Viele Beispiele in
a35examp.htm
(Aufruf per Menü "Hilfe / Link-Beispiele")
Der
Server muß dazu diese Daten als Text mit Markierungen
liefern,die jeweils einem Bereich, meistens einem <div>,
in a35 entsprechen.Diese Markierungen haben immer die Form _!_XYZ
, und direkt dahinterfolgt HTML-Text, der dann in <div
id="XYZ">landen
soll. Die nächste Markierung _!_
beendet den Text. Ausgewertet und verarbeitet wird der vom Server
kommende Text in der Funktion receivE()
in a35-pc.php.
Spezialbehandlungen für einzelne Markierungen oder eigene, neue
div’s
kann man hier zusätzlich einbauen.
(Wenn ausnahmsweise
innerhalb eines anzuzeigenden
Textes mal
dieZeichenfolge _!_
vorkommen soll, dann ist sie als _!!_
zu schreiben.)
Vier
allgemeine Fälle von "internen Links"
Eine
statische
Datei mit
Markierungen, sagen wir help.txt
(Statt
.txt
ist alles andere erlaubt, solange es eine HTML-Textdatei mit
geeigneten Markierungen _!_XYZ 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 Ausgabetext eigene Markierungen mit _!_
enthält.
Beispiele:
[in den roten Rahmen eingeben: h
a35examp.htm]
<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 alle aus dem rot umrandeten Eingabefeld direkt
abrufen mit
h
a35admin.htm
bzw. h
a35kal.htm, h
a35start.htm,
h
a35login.htm.
Statt
einer statischen Datei xyz.txt
kann es genausogut ein PHP-Aufruf
sein mit einem oder mehreren Attributen,
z.B.
<a
href="javascript:reqHelp('ajax4.php?JOB=kalend','0');">Dieser
Monat</a>
So
kann man statt kalend.job
auch jeden anderen Job starten, der im Job-Ordnerliegt und keine
variablen Attribute braucht. Falls es im Beispiel 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. Z.B. indas rot umrandete Befehlsfeld folgendes
eingeben:
h
ajax4.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: (wie beschrieben in a35id.job
und zu sehen z.B. in a35del.job)
perform
authent
und
hängt ans Ende den Abschnitt mit der authent-Routine
an:(die Variable #uID
liefert a35 nach korrektem Login stets mit!)
:authent
var
#dts(0,8) #uID(e"K")
cry
ins #uid
...
Formulare
[Anzeige 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 alle
an ajax4.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. V20, 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 Variablen Vnnn
dann
überschrieben würden.
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
erkennen 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.
Standardisierte
Methodik für den Normalfall
Beispiele:
presto.job
oder form1.job
erzeugt ein Formular,
prsave.job
verarbeitet in
beiden Fällen den Inhalt.
prtest.job
genauso, aber
nur zwecks Anzeige, ohne Speichern.
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
zum Testen:
in separatem Browserfenster
eingeben
href=".../ajax4.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.
Einfacher
Fall: Es
ist nur der Job auszuführen, ohne eine Variable zu
übergeben:
javascript:reqJob('a35dbi');
führt
a35dbi.job
aus.
javascript:reqDJob('xyz');
führt
xyz.job
aus.
ABER mitgeliefert an den Job werden in jedem Fall #uRN
mit der aktuellen Satznummer und #urS
mit dem letzten Suchbefehl, nach Login auch der Identifikator
#uID.
Bei
Aufruf mit reqDJob()
wird der Job auf DbDir/jobs
gesucht statt auf dem Webserver.
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('fts.htm');
Fünf Spezialfälle für interne Links
Dies sind Links für Standardaufgaben, die in jeder Anwendung auf Basisvon a35 auftreten können.Diejenigen mit req... machen jeweils einen AJAX-Aufruf.Die gleichnamigen Funktionen stehen in a35.js.
reqLoad:
Einen Datensatz holen und zeigen (erscheint im Quadranten EXT oben
links)
Form:href="javascript:reqLoad(satznr);"
mit
der internen Satznummer num. Beispiele dazu: in
a35ind.jobunda35erg.job
Gestartet
wird der Job a35get.job
und ihm wird die satznr
als #urN
übergeben, ferner ein codierter Passwortstring als #uID,
falls vorher ein Login erfolgte.
reqRes:
Eine Ergebnismenge bilden und zeigen
Form:
javascript:reqRes('PER
shakespeare, william');
mit
dem Suchbefehl in der Klammer.
Beispiele
dazu sieht man in den Zeilen jeder Ergebnisanzeige, produziert
vona35erg.job
reqInd:
Einen Registerabschnitt anzeigen
Form:
javascript:reqInd('PER _shakespeare, william');
(Der
_ bewirkt, daß beim Zugriff auf das Register die Umcodierung
nichtausgelöst wird.)
Option:
Vor den Befehl ein '-'
setzen, dann wird von der gewünschten Stelleaus rückwärts
gegangen, hier also ('-PER ...')
Beispiele
dazu in a35ind.job
für die Links "Nach oben" und "Nach unten"
reqEdit
: Einen Datensatz zum Bearbeiten bereitstellen (nur nach
erfolgreihem
Login)
Form:javascript:reqEdit('jobname','satznummer')
Damit
wird ein Job aufgerufen, dem explizit die Satznummer zu übergeben
ist
Beispiele
für
jobname:
presto oder
form1
oder a35del
(s.o. Allgemeine Fälle 3.)
Option:
Ein ? vor jobname
setzen, dann kommt zuerst eine Rückfrage zur Bestätigung,
bevor der Job ausgeführt wird, z.B.
javascript:reqEdit('?a35del','5660');
reqJob()und reqDJob(): Führen jeweils den Job aus, dessen Name übergeben wird, und überreichen diesem Job automaisch die aktuelle Satznummer und Ergebnismenge. Im Falle des reqDJob() wird die Jobdatei aus dem DbDir/jobs entnommen!
Test außerhalb von a35, um zu sehen, was der Server bzw. Job wirklich liefert. Es folgen einige Beispiele, die man leicht variieren kann:
Indexanzeige (Quadrant 4 = _!_REG ):
http://127.0.0.1/demo/ajax4.php?JOB=a35ind&VurS=per shakespeare
Ergebnisanzeige (Quadrant 3 = _!_ERG ):
http://127.0.0.1/demo/ajax4.php?JOB=a35erg&VurS=per goethe?
Einzelner Datensatz (Quadrant 1, über seine interne Nummer oder auch einen Find-Befehl):
http://127.0.0.1/demo/ajax4.php?JOB=a35get&VurN=1234
bzw.
http://127.0.0.1/demo/ajax4.php?JOB=a35get&VurF=PER+shakesp?
Dann den Quelltext betrachten. Er wurde komplett von dem jeweiligen Job erstellt.Den Suchbefehl am Ende beliebig variieren und schauen, wie sich das auswirkt.
Der
erste Teil ist immer gleich:
http://127.0.0.1/demo/ajax4.php?JOB=
Dann
kommt der Name der auszuführenden Jobdatei, hier a35ind,
a35erg
u.a.
Am
Ende hinter & angehängt folgen die zu übergebenden
Variablen, hier z.B. VurS;
in der Jobdatei steht dieser Wert dann als #urS
zur Verfügung.
Sonderfall in Formularen: Datumswahl
Man
bindet in seinen HTML-Text ein (in dem das Formular steht):
<script
src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
Man
schreibt in dem HTML-Text, der dem Formular vorangeht:
<script>
$(function()
{ $( "#Vudp" ).datepicker({ dateFormat:
"yymmdd" });
$( "#Vudp" ).datepicker();
});</script>
Und
dann im Formular das input-Feld:
Datum:
<input type="text" id="Vudp" />
Klickt
man in dieses input-Feld, erscheint der Datumswähler. Hat man
ein Datum ausgewählt, landet es in der Form yymmdd
im input-Feld
(z.B. 20130218),
und beim Abschicken des Formulars kommt es im Job an in der Variablen
#udp.
Geschäftsgangsfunktionen:
Aufruf mit h
a35order.htm. Hierzu
gehören einige spezifische Jobs, z.B. a-exemp.job
und
o-bestel.job,
die zu den Datenstrukturen der Standard-Funktionspakete ORDER und aLF
passen. Dieser Bereich ist noch im Aufbau. Dazu sind die unter a99
vorhandenen FLEX-Dateien in Jobdateien umzuschreiben, wobei die
Aufrufe und Dialoge z.T. anders realisiert werden müssen.
ALLGEMEINER TIP, wenn JavaScript involviert ist:
Strg+Shift+J:
Fehlerkonsole zeigen lassen (beim FireFox)
JavaScript-Fehler
können damit leicht und schnell gefunden werden.
Für
avanti:
Logging einschalten (in avanti.con, dann in der Logdatei nachschauen,
wenn a35 ohne Fehlermeldung einfach nicht funktioniert.
Kurzfassung: Notwendige Schritte zur a35-Webanbindung einer Datenbank
Tip: Drucken Sie diese Liste aus und notieren Sie die Namen etc. für Ihre Datenbank bei den Punkten 0. - 7.
* markiert die in jedem Fall nötigen Dateien: sie müssen angepasst werden, wenn man nicht a.cfg verwendet
+ Diese Dateien sind bei Bedarf zu ändern, für die Grundfunktionen werden sie aber nicht gebraucht
Vier
verschiedene Ordner
sind zu berücksichtigen:
(Datenbankserver
und Webserver
können physisch dieselbe Maschine sein)
Wo
diese Ordner im Dateisystem liegen, das ist Sache des Einrichters.
In Blau: Namen der Ordner im Install-Paket
Datenbankserver
---------------
ProgDir : Hier liegen die Programme avanti und acon, sowie allgemeine Parameter
allegro /jobs Unterordner (optional) für spezifische .job-Dateien
DbDir : Jede Datenbank liegt auf einem eigenen Verzeichnis mit beliebigem Namen
und besteht aus mindestens folgenden Dateien: (z.B: DBN = cat und X=a)
allegro/demo2 DBN_n.Xld Datendateien (bis zu 255 Stück),
und DBN.Xdx Indexdateien, enthalten die Zugriffsregister
allegro/datuni DBN.tbl Satztabelle (Adressen der Datensätze)
DBN.stl Kurztiteldatei: eine Zeile je Satz für Übersichten
/users = jeweils Unterordner für Namen schreibberechtigter Nutzer
Weitere Dateien: siehe 3.+4. unten
WebServer
Die
Basis der Web-Dateien, das WebDir,
ist in der Regel …/www
oder .../htdocs
WebDir : Am Basis-Ordner des Webservers, ein Unterordner für jede Datenbank,
/htdocs/db/... die ans Netz soll. Der Name ist beliebig
Inhalt: php und html-Dateien und einige andere (s. README)
/xxx Daran hängt ein Unterordner mit datenbankspezifischen Jobdateien
ScriptDir: Parallel zu den WebDirs, ein Ordner namens "scripts", mit einem
/htdocs/db/scripts Hier liegen .js und .css
/jobs Unterordner mit allgemeingültigen Jobdateien
0. Beispiele für Verzeichnisnamen (Windows bzw. Linux)
Auf dem Datenbankserver:
ProgDir
c:\allegro (mit Unterordner jobs - optional, eher selten)
/home/allegro
DbDir
d:\datenbanken\katalog (mit Unterordner users)
/home/data/opac
Auf dem Webserver:
WebDir
c:\xampp\htdocs\db\katalog
/var/www/db/katalog
ScriptDir
c:\xampp\htdocs\db\scripts mit Unterordner jobs
/var/www/db/scripts
Inhalte der Ordner und Dateien
1. ProgDir : a35 braucht nur 4 Dateien:
avanti[.exe] Der Datenbankserver; Läuft als Daemon (Unix) bzw. Dienst (Win)
acon[.exe] Führt die Jobs aus; Erledigt Zugriffe und liefert Ergebnisse
* avanti.con avanti-Port-Nr., Liste der Datenbanken + Eigenschaften, s. 2.
uifsger Texte der Meldungen der Programme
Hier liegen auch weitere allegro-Programme: srch(.exe, import, index, qrix ...
sowie
unter Windows: a99 und alle anderen.
Außerdem alle
allgemeingültigen Parameterdateien, z.B. e-1.@pr, e-unihtm.@pr
2. avanti.con = Eigenschaftsliste der Datenbanken
In avanti.con (ProgDir) braucht jede anzubietende Datenbank einen Abschnitt,
der mit einem symbol. Namen der Datenbank beginnt, z.B.:
[kata] // das ist der symbolische Name der Datenbank, sie liegt hier:
directory = d:\datenbanken\katalog oder /home/data/catalog
access = 3 // d.h. Schreiben soll grundsätzlich möglich sein
konfiguration = a // es wird $a.cfg benutzt
indexparameter = cat // cat.api sind die Indexparameter
# username = password:rights
# Nur mit rights>1 hat der user Schreibberechtigung
opac = OPAC:0
master = xyzabc:3
Hier stehen nicht die Namen der schreibberechtigten Endnutzer! (s. 3. "users")
Der symbolische Name und die Angabe eines der users mit Passwort gehören
in die Datei ajax4ini.php, siehe 5.
Der
username in avanti.con wird nur von acon gebraucht, damit dieses
Programm
weiß,
ob Schreibzugriffe überhaupt zulässig sein sollen!
Mit der Einstellung
access=0
kann man den gesamten Schreibbetrieb
kurzfristig stoppen.
avanti
entnimmt die Angaben user
und password
aus ajax4ini.php
und hängt dann an einen Job eine
Zeile mit folgender Struktur an:
@
DB=symb
ID=user/password,
z.B.
@ DB=kata ID=master/xyzabc
3. DbDir
Gebraucht
wird eine .stl-Datei (Kurztitelregister)
Dafür zuerst einige Zeilen in die Indexparameter einbauen (s.4.):
(konkretes
Beispiel in cat.apr)
i0=92 Länge der Kurzzeilen
ak=zz+0 Damit wird die Erzeugung einer Kurzzeile veranlaßt
...
#-0 Abschnitt f.d. Struktur der Kurzzeile
... Befehle für die Erzeugung der einzelnen Teile der Zeile
#+#
Falls vorher noch keine .stl vorhanden war:
in
a99 die Funktion "Kurzanzeige erneuern" (oder Index
erneuern)
DbDir/users: für jeden schreibberechtigten Endnutzer "xyz" eine Datei mit
dem
Namen "xyz", die sein codiertes Passwort enthält, das
er
sich
selber gegeben hat (Funktion "Registrieren" in a35)
4. DbDir: ParameterDateien und CFG
In ProgDir stehen die allgemeingültigen Parameter, spezifische im DbDir
X.cfg
Konfigurationsdatei (Default: $a.cfg)
WICHTIG:
Eintrag ce für letztes Änderungsdatum
dbn.Xpi
Indexparameter, z.B. dbn=cat, also cat.api.
WICHTIG:
tucodes einbauen; evtl. #-1 ... f.Umcodierung u. ic=1
X.cfl nur falls Anzeige mit Feldbedeutungen gewünscht (cfga.job)
*
d-html.Xpr Param.f. Anzeige von Datensätzen, A-Format,
nutzt ad-utf.Xpt
WICHTIG:
Abschnitt #-( f. interne Anzeige
*
a35erg.Xpr Param.f. Erstellung der Einträge in
Ergebnislisten
+ a35fts.Xpr entspr. f.d. Erstellung von Ergebnislisten der
Volltextsuche
d-htm.Xpt Codes f. HTML-Ausgabe (Kopie von d-htm.apt)
ad-utf.Xpt Zeichenwandlung intern -> utf-8 f. Datensatzanzeige
e-unihtm.Xpr Zwei allg.gültige Parameter f.d. Zeichenumcodierung
e-unicod.Xpr aus dem internen Code in UTF-8, nutzt ad-utf.apt
5. WebDir : HTML und PHP Dateien, z.B. auf .../htdocs/db/catalog
Je ein solcher Db-Ordner f. jede anzubietende Datenbank, darin die Dateien aus a35/www/db/demo:
a35-pc.php Startdatei für normalen Browser
+ a35-pc-menu.php Datei mit dem Inhalt des Menüs
a35-tab.php Endnutzer-Version, auch f. Tablets
+ a35-tab-cont.php die sichtbaren Elemente
a35-app.php Version f. Smartphones (hat kein Menü!)
a35-head-*.php
Zwei alternative Kopfdateien f. jedes der drei Modelle
mit dem Material f.d. Seitenkopf
a35ini.php
enth. die Namen der zu benutzenden Dateien
*
ajax4ini.php
Enth. den symb.
Namen,
z.B. opac, der in avanti.con steht!
Und die Adresse
des Db-Servers
+ Port-Nr.
von avanti.
Ferner: Anzeigeparam., Sortierpunkt f. Erg.Listen
* a35ini.php Einige spez. Setzungen f.d. Datenbank: Titel, Kopfdateinamen,
Liste der anzubietenden Suchregister
a35find.txt Sehr einfaches Beispiel, aufzurufen mit
Eingabe: h a35find.txt im roten Eingabefeld
(Dateityp .txt or .htm ist beim h-Befehl unwichtig)
6. WebDir/Db-Ordner/name
Spezif.
Jobs f.d. Datenbank, z.B. .../htdocs/db/catalog/catjobs
(Der
Name dieses Ordners muß in ajax4ini.php stehen)
Hinw.: Jeder Job wird zuerst hier gesucht, dann auf ../scripts/jobs
Datenbankspezif. Versionen von allg. Jobs also hier unterbringen.
+ a35get.job Der wichtigste spezifische Job, f.d. Anzeige eines Datensatzes.
+ form1.job Formular-Editierung eines Datensatzes
7. WebDir/ScriptDir : .../htdocs/db/scripts
Hier liegen allgemeingültige Dateien für alle anzubietenden Datenbanken
a35-min.js, jquery-min.js Javascripte, include in a35-pc.php etc.
.css CSS3
jobs/*.job Allgemeingültige Jobs for a35. Spezifische s. 6.