Skip to content

Layout

Mit dem Layout-Modul designst du Layouts ganz nach deinen Vorstellungen, z.B. ausklappbare Menüs, interaktive Formulare oder einladende Dashboards. Bei der Programmierung unseres Layouts hatten wir zwei Hauptziele: hohe Flexibilität und optimierter Basiscode. Dadurch sind unsere Layouts wesentlich schneller als andere Lösungen und erzeugen keine Performance-Probleme.

Funktion und Aussehen

Das Layout basiert auf dem Konzept von Blocks, also Blöcken, die du entweder horizontal (von links nach rechts) oder vertikal (von oben nach unten) anordnen kannst. Der Inhalt der Blocks ist frei gestaltbar und kann beispielsweise Text, andere GIP- oder arcRider-Module sowie HTML-Elemente enthalten. Lasse deiner Kreativität freien Lauf. Außerdem kannst du dank des Style-Keys deinen Layouts und Blocks mit Inline-CSS eine individuelle Optik geben.

Nutzer-Interaktion

Auch bei der Gestaltung der Nutzer-Interaktion mit dem Modul lassen wir dir alle Freiheiten. Sowohl dem Layout selbst, als auch den Blocks kannst du eine beliebige Anzahl an Actions zuweisen. Jede Action besteht aus einem auslösenden Trigger und einem Array von Scripts, die bei Auslösen des Triggers ausgeführt werden. Als Trigger können Klick, Mausbewegung und alle weiteren HTML Mouse Events eingesetzt werden. Je nach Anwendung können auch andere HTML Events funktionieren. Eine Liste solcher Events findest du beispielsweise hier. Weitere Infos zu Actions findest du in diesem Teil unserer Doku.

Modulcode

json
GIP_layout({
   uniqueId: "",
   embedded: {
   	height: "",
   	styleHtml: "",
   	styleStri: "",
   },
   direction: "",
   style: "",
   blocks: [{
   	style: "",
   	value: *any*,
   	actions: [{
   		trigger: "",
   		scripts: [{
   			type: "",
   			tableId: "",
   			viewId: "",
   			recordId: "",
   			tab: "",
   			fieldId: "",
   			dialogId: "",
   			value: *any*,
   			changeFieldValues: [{
   				fieldId: "",
   				value: *any*,
   			}],
   			displayAfterCreate: "",
   			setNewRecordId: [{
   				recordId: "",
   				fieldId: "",
   			}],
   			showCloseButton: true,
   			showAsModal: true,
   		}],
   	}],
   }],
   actions: [{
   	trigger: "",
   	scripts: [{
   		type: "",
   		tableId: "",
   		viewId: "",
   		recordId: "",
   		tab: "",
   		fieldId: "",
   		dialogId: "",
   		value: *any*,
   		changeFieldValues: [{
   			fieldId: "",
   			value: *any*,
   		}],
   		displayAfterCreate: "",
   		setNewRecordId: [{
   			recordId: "",
   			fieldId: "",
   		}],
   		showCloseButton: true,
   		showAsModal: true,
   	}],
   }],
})
json
GIP_layout({
   uniqueId: "",
   blocks: [{
   	value: *any*,
   }],
})
json
html( raw(GIP_master({})) + 
raw(GIP_layout({
   	uniqueId: "",
   	embedded: {
   		height: "",
   		styleHtml: "",
   		styleStri: "",
   },
   	direction: "",
   	style: "",
   	blocks: [{
   		style: "",
   		value: *any*,
   		actions: [{
   			trigger: "",
   			scripts: [{
   				type: "",
   				tableId: "",
   				viewId: "",
   				recordId: "",
   				tab: "",
   				fieldId: "",
   				dialogId: "",
   				value: *any*,
   				changeFieldValues: [{
   					fieldId: "",
   					value: *any*,
   			}],
   				displayAfterCreate: "",
   				setNewRecordId: [{
   					recordId: "",
   					fieldId: "",
   			}],
   				showCloseButton: true,
   				showAsModal: true,
   		}],
   	}],
   }],
   	actions: [{
   		trigger: "",
   		scripts: [{
   			type: "",
   			tableId: "",
   			viewId: "",
   			recordId: "",
   			tab: "",
   			fieldId: "",
   			dialogId: "",
   			value: *any*,
   			changeFieldValues: [{
   				fieldId: "",
   				value: *any*,
   		}],
   			displayAfterCreate: "",
   			setNewRecordId: [{
   				recordId: "",
   				fieldId: "",
   		}],
   			showCloseButton: true,
   			showAsModal: true,
   	}],
   }],
})
))

Modulkeys

uniqueId
DatentypIst Pflichtkey?Default
stringtrue-

Eindeutige Kennung des eingesetzten Moduls. Ideal ist eine Kombination aus Text und der Record-ID, also z.B.:

uniqueId: "LayoutÜberschrift" + Nr

Ist die ID nicht einzigartig, kann es zu Fehlern bei Anzeige und Funktion der eingesetzten Module in der Tabelle kommen.

embedded
DatentypIst Pflichtkey?Default
boolean, objectfalsefalse

Wenn des Modul in einem anderen Modul eingebettet ist, wird der boolesche Wert true eingetragen. Liegt das Modul alleine, bzw. als äußerster Container in einem Formelfeld, kann entweder false oder ein Object mit Angaben zur Höhe und Styling des Formelfeldes angegeben werden.

height
DatentypIst Pflichtkey?Default
stringfalse"auto"

Höhe des Moduls in Pixeln (px).

styleHtml
DatentypIst Pflichtkey?Default
stringfalse-

Inline CSS-Styling des Html-Containers des Formel-Feldes, in dem die GIP-Module liegen.

styleStri
DatentypIst Pflichtkey?Default
stringfalse-

Inline CSS-Styling des Stringeditor-Containers des Formel-Feldes, in dem die GIP-Module liegen.

direction
DatentypIst Pflichtkey?Default
stringfalse"horizontal"

Für die Ausrichtung der Blöcke des Moduls gibt es die Befehle "horizontal" (von links nach rechts nebeneinander) und "vertical" (von oben nach unten untereinander).

style
DatentypIst Pflichtkey?Default
stringfalseSiehe (Globaler CSS-Code)[/GlobalerCSS-Code]

Inline CSS-Styling des Moduls.

blocks
DatentypIst Pflichtkey?Default
array of objectstrue-

Enthält ein Array der Inhaltsblocks des Moduls. Für jeden Block können Wert, Styling und Aktionen bei Interaktion mit dem Block angegeben werden.

style
DatentypIst Pflichtkey?Default
stringfalseSiehe (Globaler CSS-Code)[/GlobalerCSS-Code]

Inline CSS-Styling des Moduls.

value
DatentypIst Pflichtkey?Default
anytrue-

Eingabe des gewünschten Wertes.

actions
DatentypIst Pflichtkey?Default
array of objectsfalse-

Enthält ein Array mehrerer Actions. Jede Action ist aus einem Trigger, der die Action auslöst, und einem Array der auszuführenden Funktionen nach Auslösen des Triggers (Script) aufgebaut.

trigger
DatentypIst Pflichtkey?Default
stringtrue-

Legt fest, durch welche User-Eingaben die Funktionen der Action ausgelöst werden. Als Trigger können alle HTML Mouse Events gewählt werden.

scripts
DatentypIst Pflichtkey?Default
array of objectstrue-

Enthält ein Array der Funktionen, die durch den Trigger der Aktion ausgeführt werden.

type
DatentypIst Pflichtkey?Default
stringtrue-

Der Typ der Funktion wird aus der Liste der verfügbaren Funktionen gewählt (hier zu finden).

tableId
DatentypIst Pflichtkey?Default
stringtrue-

ID der Ziel-Tabelle.

viewId
DatentypIst Pflichtkey?Default
stringfalse-

ID des Ziel-Views.

Achtung

Für viewId muss die View-ID und nicht der View-Name angegeben werden. Um die View-ID zu erhalten, öffnet man den View der Tabelle (ohne einen Record zu öffnen), klickt in die URL und kopiert den String hinter dem letzten Slash (/). Die View-ID der URL "..../module/T/view/AbyXqEZayZPQgjFm" ist demnach "AbyXqEZayZPQgjFm".

recordId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Records.

tab
DatentypIst Pflichtkey?Default
stringfalse-

Name des Ziel-Tabs.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

dialogId
DatentypIst Pflichtkey?Default
stringtrue-

Hier ist die uniqueId des Ziel-Dialogs anzugeben.

value
DatentypIst Pflichtkey?Default
anytrue-

Eingabe des gewünschten Wertes.

changeFieldValues
DatentypIst Pflichtkey?Default
array of objectsfalse-

Schreibt Werte in Ziel-Felder eines neu erstellten Records.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

value
DatentypIst Pflichtkey?Default
anytrue-

Eingabe des gewünschten Wertes.

displayAfterCreate
DatentypIst Pflichtkey?Default
stringfalse-

Öffnet einen neu erstellten Record wahlweise direkt, als Popup oder als Vollbildansicht.

setNewRecordId
DatentypIst Pflichtkey?Default
array of objectsfalse-

Schreibt die ID eines neu erstellten Records in Ziel-Felder von Ziel-Records.

recordId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Records.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

showCloseButton
DatentypIst Pflichtkey?Default
booleanfalse-

Gibt an, ob ein Schließen-Button in der oberen rechten Ecke des Dialogs angezeigt werden soll. Achtung: Wenn showCloseButton = false ist, sollte der Programmierer die Funktion "closeGIPdialog" in ein Feld einbauen, damit der Nutzer den Dialog wieder schließen kann. Überschreibt den showCloseButton-Status, der im Dialog selbst angegeben ist.

showAsModal
DatentypIst Pflichtkey?Default
booleanfalse-

Gibt an, ob das Dialog-Element als Modal-Element angezeigt werden soll. Modal-Element: Der Nutzer kann nur mit dem Dialog-Element, aber nicht mit den Ninox-Feldern im Hintergrund interagieren, wenn der Dialog geöffnet ist. Nicht-Modal-Element: Die Interaktion mit den Ninox-Feldern im Hintergrund ist weiterhin möglich, wenn der Dialog geöffnet ist. . Überschreibt den showAsModal-Status, der im Dialog selbst angegeben ist.

actions
DatentypIst Pflichtkey?Default
array of objectsfalse-

Enthält ein Array mehrerer Actions. Jede Action ist aus einem Trigger, der die Action auslöst, und einem Array der auszuführenden Funktionen nach Auslösen des Triggers (Script) aufgebaut.

trigger
DatentypIst Pflichtkey?Default
stringtrue-

Legt fest, durch welche User-Eingaben die Funktionen der Action ausgelöst werden. Als Trigger können alle HTML Mouse Events gewählt werden.

scripts
DatentypIst Pflichtkey?Default
array of objectstrue-

Enthält ein Array der Funktionen, die durch den Trigger der Aktion ausgeführt werden.

type
DatentypIst Pflichtkey?Default
stringtrue-

Der Typ der Funktion wird aus der Liste der verfügbaren Funktionen gewählt (hier zu finden).

tableId
DatentypIst Pflichtkey?Default
stringtrue-

ID der Ziel-Tabelle.

viewId
DatentypIst Pflichtkey?Default
stringfalse-

ID des Ziel-Views.

Achtung

Für viewId muss die View-ID und nicht der View-Name angegeben werden. Um die View-ID zu erhalten, öffnet man den View der Tabelle (ohne einen Record zu öffnen), klickt in die URL und kopiert den String hinter dem letzten Slash (/). Die View-ID der URL "..../module/T/view/AbyXqEZayZPQgjFm" ist demnach "AbyXqEZayZPQgjFm".

recordId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Records.

tab
DatentypIst Pflichtkey?Default
stringfalse-

Name des Ziel-Tabs.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

dialogId
DatentypIst Pflichtkey?Default
stringtrue-

Hier ist die uniqueId des Ziel-Dialogs anzugeben.

value
DatentypIst Pflichtkey?Default
anytrue-

Eingabe des gewünschten Wertes.

changeFieldValues
DatentypIst Pflichtkey?Default
array of objectsfalse-

Schreibt Werte in Ziel-Felder eines neu erstellten Records.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

value
DatentypIst Pflichtkey?Default
anytrue-

Eingabe des gewünschten Wertes.

displayAfterCreate
DatentypIst Pflichtkey?Default
stringfalse-

Öffnet einen neu erstellten Record wahlweise direkt, als Popup oder als Vollbildansicht.

setNewRecordId
DatentypIst Pflichtkey?Default
array of objectsfalse-

Schreibt die ID eines neu erstellten Records in Ziel-Felder von Ziel-Records.

recordId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Records.

fieldId
DatentypIst Pflichtkey?Default
stringtrue-

ID des Ziel-Feldes.

showCloseButton
DatentypIst Pflichtkey?Default
booleanfalse-

Gibt an, ob ein Schließen-Button in der oberen rechten Ecke des Dialogs angezeigt werden soll. Achtung: Wenn showCloseButton = false ist, sollte der Programmierer die Funktion "closeGIPdialog" in ein Feld einbauen, damit der Nutzer den Dialog wieder schließen kann. Überschreibt den showCloseButton-Status, der im Dialog selbst angegeben ist.

showAsModal
DatentypIst Pflichtkey?Default
booleanfalse-

Gibt an, ob das Dialog-Element als Modal-Element angezeigt werden soll. Modal-Element: Der Nutzer kann nur mit dem Dialog-Element, aber nicht mit den Ninox-Feldern im Hintergrund interagieren, wenn der Dialog geöffnet ist. Nicht-Modal-Element: Die Interaktion mit den Ninox-Feldern im Hintergrund ist weiterhin möglich, wenn der Dialog geöffnet ist. . Überschreibt den showAsModal-Status, der im Dialog selbst angegeben ist.

Beispiele

Text mit Layout anordnen

Wir möchten Inhalt mit dem Layout-Modul anordnen, in diesem Beispiel den Text für ein Brot-Rezept. Das Ergebnis soll wie folgt aussehen: Beispiel Text mit Layout anordnen

Um die Überschrift "Rezept für Dinkel-Mischbrot" oberhalb des eigentlichen Rezepts anzulegen, benötigen wir zuerst ein vertikales Layout mit zwei Blöcken.Der erste Block enthält die Überschrift, der zweite Block ist für das Rezept.

json
GIP_layout({
    uniqueId: "Outer Layout" + Nr,
    embedded: false,
    direction: "vertical",
    blocks: [{
        style: "",
        value: "Rezept für Dinkel-Mischbrot"
    },
    {
        style: "",
        value: "" //Hier kommt gleich der Inhalt für das Rezept rein.
    }]
})

Dem Block der Überschrift geben wir einen Inline-Style, um die Aspekte wie Schriftart, Farbe, Größe, etc.einzustellen und den Text mittig im Block darzustellen.

css
color: #7F0000; font: small-caps bold 25px/2 times-new-roman; text-align: center;

Das Rezept selbst ordnen wir mit einem weiteren Layout in zwei Spalten an, um links unsere Mengenangaben und rechts die Anweisungen anzuzeigen.Das Layout hat in diesem Fall die Ausrichtung "horizontal" und istembedded: true.

json
GIP_layout({
    uniqueId: "Outer Layout" + Nr,
    embedded: false,
    direction: "vertical",
    blocks: [{
        style: "color: #7F0000; font: small-caps bold 25px/2 times-new-roman; text-align: center;",
        value: "Rezept für Dinkel-Mischbrot"
    },
    {
        style: "",
        value: GIP_layout({
            uniqueId: "Inner Layout" + Nr,
            embedded: true,
            direction: "horizontal",
            blocks: [{
                style: "",
                value: "" //Hier kommen gleich die Mengenangaben rein.
            },
            {
                style: "",
                value: "" //Hier kommen gleich die Rezeptschritte rein.
            }]
        })
    }]
})

Für dieses zweite Layout verändern wir nun insgesamt Schriftart, Größe, Zeilenabstand und Farbe:

css
color: #1F305E; font: 14px/2 arial;

Zusätzlich zu diesem Styling erhalten die beiden Layout-Blöcke noch eine Breite, Padding und im Fall des linken Blocks eine Border.Die Texte schreiben wir jeweils als HTML-Listen.

Code des Beispiels

json
html(raw(GIP_master({})) + 
raw(GIP_layout({
    uniqueId: "Outer Layout" + Nr,
    embedded: false,
    direction: "vertical",
    blocks: [{
        style: "color: #7F0000; font: small-caps bold 25px/2 times-new-roman; text-align: center; display: inline-block;",
        value: "Rezept für Dinkel-Mischbrot"
    },
    {
        style: "color: #1F305E; font: 14px/2 arial;",
        value: GIP_layout({
            uniqueId: "Inner Layout" + Nr,
            embedded: true,
            direction: "horizontal",
            blocks: [{
                style: "width: 400px; padding: 15px; align-items: stretch; border-right: 1px dashed;",
                value: "<ul>
                <li>7 g Hefe</li>
                <li>20 g Salz</li>
                <li>45 g Rapsöl</li>
                <li>650 g Wasser</li>
                <li>500 g Dinkelmehl, Type 1050</li>
                <li>500 g Dinkelmehl, Type 630</li>
                </ul>"
            },
            {
                style: "width: 100%; padding: 15px; align-items: stretch;",
                value: "<ol>
                <li>Hefe, Salz, Rapsöl und Wasser in einer großen Schüssel mit einem Schneebesen vermischen.</li>
                <li>Dinkelmehl, Type 1050, in die Flüssigkeit mit einmischen</li>
                <li>Dinkelmehl, Type 630, nach uns nach einmischen. Wenn der Teig zu fest für den Schneebesen wird, entweder das Mehl per Hand und einer Teigkarte weiter einarbeiten oder eine Küchenmaschine mit Knethaken verwenden.</li>
                <li>Teig eine halbe Stunde **bei Raumtemperatur** gehen lassen. Danach den Teig zusammenfalten, um Spannung aufzubauen.</li>
                <li>Nach dem ersten Falten den Teig **im Kühlschrank** gehen lassen. Über 2 Stunden verteilt mehrmals zusammenfalten (etwa alle halbe Stunde).</li>
                <li>Teig über Nacht im Kühlschrank gehen lassen (zwischen 12 und 24 Stunden).</li>
                <li>Am Backtag den Teig eine halbe Stunde bis eine Stunde vor dem Backen aus dem Kühlschrank nehmen und anwärmen lassen.</li>
                <li>Teig in gewünschter Weise formen und gehen lassen. Backofen auf 200°C Ober-/Unterhitze anheizen.</li>
                <li>Teigling für dem Backen einschneiden und mit Wasser besprühen. Danach in den Ofen schieben und 5-10 Minuten anbacken.</li>
                <li>Temperatur auf 190°C reduzieren und fertig backen (etwa weitere 40 Minuten). Das Brot ist durch, wenn die Innentemperatur 95°C beträgt, bzw. es sich hohl anhört, wenn man auf den Boden klopft.</li>
                <li>Nach dem Backen auf einem Gitter auskühlen lassen.</li>
                </ol>"
            }]
        })
    }]
})
))