Um die Erstellung von eforia Modulen zu vereinfachen, existiert eine Unit mit Hilfsroutinen: sysmod/cms_sub.mod
Diese kann über include eingebunden werden:
include ../sysmod/cms_sub.mod


Variablen

var cms_nLfdWEB : INTEGER
var cms_cSpacer : STRING
var cms_cSes    : STRING
var cms_cURL    : STRING
var cms_cParam  : STRING

Das sind die gleichen Variablen, die das Modul als Parameter übergeben bekommt. Diese sind mit dem Prefix cms_ global definiert. D.H. sie stehen überall zur Verfügung. Allerdings müssen diese gesetzt werden. Dazu sollten die ersten Zeilen von cmsMain diese sein:
cms_nLfdWEB := nLfdWEB
cms_cSpacer := cSpacer
cms_cSes    := cSes
cms_cURL    := cURL
cms_cParam  := cParam

Dadurch kann überall auf die Parameter zugegriffen werden, ohne dass diese von Prozedur zu Prozedur mitgegeben werden müssen.


Routinen


cms_GetTable
procedure cms_GetTable(c:STRING):INTEGER

Beschreibung:

Sucht Tabellenhandle aus bereits geöffneten Tabellen. Falls die Tabelle noch nicht geöffnet ist, wird versucht sie zu öffnen.

Parameter:
c : STRING : Tabellenname als String ohne Endung (.dat)

Rückgabe:
INTEGER : Tabellenhandle oder 0

Beispiel:
db:=cms_GetTable('cms_web')


cms_CheckRecht
procedure cms_CheckRecht(cSes,cRecht:STRING):STRING

Beschreibung:

Ermittelt Recht für aktuellen User über die Session in cSes.

Parameter:
cSes : STRING : Session, für die das Recht ermittelt werden soll
cRecht : STRING : Abzufragendes Recht als String

Rückgabe:
STRING : Der Wert der als Recht eingetragen ist

Beispiel:
if cms_CheckRecht(cSes,'sysop')='1' then  // User ist Sysop

Hinweis:

Intern werden die Funktionen des Userman benutzt. Weitere Infos zur Rechteverwaltung sind dort zu finden.  


cms_WriteText
procedure cms_WriteText(c:STRING)

Beschreibung:

Schreibt String in Ramtext an aktuelle Position

Parameter:
c : STRING : Auszugebender Text

Rückgabe:
-

Beispiel:
cms_WriteText('Hallo Welt')

Hinweis:

Benutzt globale Variable cms_cSpacer  


cms_GetLink
procedure cms_GetLink(nLfdWeb:INTEGER;nMode : BYTE):STRING

Beschreibung:
Liefert den Link auf den Web-Datensatz mit der Laufenden Nummer nLfdWeb.
Das ist evtl. ../programm/viewer.prg?.... oder auch die statische Variante ../text/... oder auch der externe Link http://....

Parameter:

nLfdWeb : INTEGER : Laufende Nummer des Datensatzes aus cms_web
nMode : BYTE : 0=der zurückgelieferte Link ist statisch oder dynamisch, abhängig vom Datensatz; 1=der zurückgelieferte Link ist immer dynamisch (das Ziel wird in der dynamischen Variante aufgerufen)

Rückgabe:
STRING : Link/URL

Beispiel:
Link auf alle Seiten ausgeben
Achtung: auch Inaktive Seiten und Entwürfe
Das Beispiel benutzt auch cms_GetTable und cms_WriteText
var nRec,db : INTEGER
db:=cms_GetTable('cms_web')
ACCESS(db,0)
nRec:=FirstRec(db)
while nRec>0
  ReadRec(nRec)
  cms_WriteText('<a href="'+cms_GetLink(GetRField(db,'Laufende_Nummer'))+'">'+GetField(db,'Name')+'</a><br>')
  nRec:=NextRec(db)
end

Hinweis:

Benutzt die globale variable cms_cSes.  


cms_IsVisible
procedure cms_IsVisible(nLfdWeb:INTEGER):BYTE

Beschreibung:
Liefert True oder False, je nachdem ob die Seite sichtbar ist.
Die Routine überprüft dazu die Berechtigung (in cms_cSes) und ob die Seite versteckt werden soll. Ausserdem ob die Bedingung zutrifft, ob die Seite ein Entwurf ist, usw..

Parameter:
nLfdWeb : INTEGER : Laufende Nummer des Datensatzes aus cms_web

Rückgabe:
BYTE : 0 (false) oder 1 (true), je nachdem ob die Seite aktuell sichtbar ist

Beispiel:
Link auf alle Seiten ausgeben
Dabei werden nur sichtbare Seiten ausgegeben
Das Beispiel benutzt auch cms_GetTable, cms_WriteText und cms_GetLink
var nRec,db : INTEGER
db:=cms_GetTable('cms_web')
ACCESS(db,0)
nRec:=FirstRec(db)
while nRec>0
  ReadRec(nRec)
  if cms_IsVisible(GetRField(db,'Laufende_Nummer'))=1
    cms_WriteText('<a href="'+cms_GetLink(GetRField(db,'Laufende_Nummer'))+'">'+GetField(db,'Name')+'</a><br>')
  end
  nRec:=NextRec(db)
end

Hinweis:

Benutzt die globale variable cms_cSes.  


cms_InMenu
procedure cms_InMenu(nLfdWeb:INTEGER):BYTE

Beschreibung:
Liefert True oder False, je nachdem ob die Seite ins Menü aufgenommen werden soll.
Die Routine ruft intern dazu cms_IsVisible auf und prüft zusätzlich das Feld InMenu.

Parameter:
nLfdWeb : INTEGER : Laufende Nummer des Datensatzes aus cms_web

Rückgabe:
BYTE : 0 (false) oder 1 (true), je nachdem ob die Seite ins Menü aufgenommen werden soll.

Beispiel:
Link auf alle Seiten ausgeben
Dabei werden nur Seiten ausgegeben, die ins Menü aufgenommen werden sollen.
Das Beispiel benutzt auch cms_GetTable, cms_WriteText und cms_GetLink
var nRec,db : INTEGER
db:=cms_GetTable('cms_web')
ACCESS(db,0)
nRec:=FirstRec(db)
while nRec>0
  ReadRec(nRec)
  if cms_InMenu(GetRField(db,'Laufende_Nummer'))=1
    cms_WriteText('<a href="'+cms_GetLink(GetRField(db,'Laufende_Nummer'))+'">'+GetField(db,'Name')+'</a><br>')
  end
  nRec:=NextRec(db)
end

Hinweis:

Benutzt die globale variable cms_cSes.  


cms_LoadTemplate
procedure cms_LoadTemplate (cName, cText : STRING) : BYTE

Beschreibung:
Lädt das angegebene Template in den geforderten Ramtext.

Parameter:
cName : STRING : Name des Templates
cText : STRING : Name des Ziel-Ramtext

Rückgabe:
BYTE : 0 (false) oder 1 (true), je nachdem ob das Template gefunden wurde.

Beispiel:

Link auf alle Seiten ausgeben
Dabei werden nur Seiten ausgegeben, die ins Menü aufgenommen werden sollen.
Das Beispiel benutzt auch cms_GetTable, cms_WriteText und cms_GetLink
if cms_LoadTemplate ('modul/main', 'ramtext')=0
  cms_WriteText('Fehler! Template modul/main nicht gefunden!<br>')
  HALT
end

Hinweis:
Das Template wird zuerst in der Datenbank gesucht. Falls dort nichts gefunden wird, sucht die Funktion im Verzeichnis template, anschliessend in systempl.  


cmsLoadTemplate
procedure cmsLoadTemplate (cName, cLan, cText : STRING) : BYTE

Beschreibung:
Lädt das angegebene Template in den geforderten Ramtext.
Wie cms_LoadTemplate, doch werden mehrsprachige Systeme unterstützt. Wird cLan nicht angegeben wird autoamtisch die aktuell gewählte Sprache oder die Default-Sprache benutzt. In der Praxis ist daher die Angabe des Parameters cLan nicht notwendig.

Parameter:
cName : STRING : Name des Templates
cLan : STRING : Name der Sprache
cText : STRING : Name des Ziel-Ramtext

Rückgabe:
BYTE
: 0 (false) oder 1 (true), je nachdem ob das Template gefunden wurde.


cms_GetDefaultLan
procedure cms_GetDefaultLan : String 

Beschreibung:
Liefert die Standard-Sprache (Default) oder Leerstring, wenn keine Sprachverwaltung benutzt wird.

Rückgabe:
STRING : Standard-Sprache (Default) oder Leerstring (wenn keine Sprachverwaltung benutzt wird).


cms_GetLan
procedure cms_GetLan (db, nLfd : Integer) : String

Beschreibung:
Liefert Sprache des angegebenen Datensatzes in cms_web, cms_template, usw..

Parameter:
db   : INTEGER : Handle der Datenbank (cms_web, cms_template, cms_gfx, cms_files)
nLfd : INTEGER : Laufende_Nummer des Datensatzes

Rückgabe:
STRING : Sprache des Datensatzes.


cms_MarkDbLan
procedure cms_MarkDbLan(db:Integer;bMode:Byte;cReg,cLan:String):Integer

Beschreibung:
Markiert Datensätze in angegebener Sprache

Parameter:
db    : INTEGER : Handle der Datenbank (cms_web, cms_template, cms_gfx, cms_files)
bMode : BYTE       : 1=Zeigt nur Datensätze in der gewählten Sprache; 0=falls iPosition in gewählter Sprache nicht vorhanden ist, wird die Default-Sprache geliefert
cReg  : STRING   : Selektion (wie FindAndMark)
cLan  : STRING   : Sprache

Rückgabe:
INTEGER : Anzahl der Markierungen.




Grundroutinen
Diese stellen die Grundfunktionen eines Moduls bereit. Der Programmierer muss nur noch eine Reihe von Variablen befüllen.
Dazu sind vor dem include der Unit die Variablen zu definieren.
Eine genaue Beschreibung der Funktionen und Ihr Zweck sind im Kapitel Versionskontrolle und Funktionsverwaltung zu finden.

Versionskontrolle:

Dafür sind 3 Variablen zu definieren.
var cms_Version : INTEGER  := 0
var cms_ModuleVersion : INTEGER := 0
var cms_ShowModule : STRING := ''
Diese können und müssen bereits durch die Definition vorbelegt werden.

Beispiel:
var cms_Version : INTEGER        := 42
var cms_ModuleVersion : INTEGER  :=  1
var cms_ShowModule : STRING      := 'execmacro="Datenbankdarstellung",tool="Datenbankbearbeitung"'
Die in der Unit definierten Prozeduren liefern dann die entsprechenden Werte zurück.

Funktionsverwaltung:
Hier sind durchnummeriert Strings anzulegen:
var cms_Functions_1 : STRING := ''
var cms_Functions_2 : STRING := ''
...
Diese können und müssen bereits durch die Definition vorbelegt werden. Deshalb kann leider derzeit auch kein Array verwendet werden. Dort sind noch keine Vorbelegungen möglich. Ein Leerstring markiert das Ende der Liste.

Beispiel:
var cms_Functions_1   : STRING   := 'Linkcheck_Extern,tool,simple_show_output, Version 1.1 vom 17.8.01 / Horst Klier'
var cms_Functions_2   : STRING   := 'Linkcheck_Intern,tool,simple_show_output, Version 1.2 vom 23.8.01 / Horst Klier'
var cms_Functions_3 : STRING := ''
Die in der Unit definierten Prozeduren liefern dann die entsprechenden Werte zurück.  



Beispiel für die Verwendung von cms_sub.mod:
var cms_Version       : INTEGER  := 42
var cms_ModuleVersion : INTEGER  := 1
var cms_ShowModule    : STRING   := 'execmacro="Datenbankdarstellung",tool="Datenbankbearbeitung"'
var cms_Functions_1   : STRING   := 'Linkcheck_Extern,tool,simple_show_output, Version 1.1 vom 17.8.01 / Horst Klier'
var cms_Functions_2   : STRING   := 'Linkcheck_Intern,tool,simple_show_output, Version 1.2 vom 23.8.01 / Horst Klier'
var cms_Functions_3   : STRING   := ''
include ../sysmod/cms_sub.mod
 
eforia® web manager Dokumentation
Stand V 3.01 / 20.12.2010
© Horst Klier
http://www.klier.net
Impressum