System11/KWML A A A

0.0.1 Inhaltsverzeichniss




0.0.1 Inhaltsverzeichniss
0.0.2 Vorwort
0.0.3 Begriffserklährung

1.1.0 die reihenfolge
1.2.0 module erstellen
1.3.0 kunden erstellen
1.3.1 domain, index template
1.4.0 kunden-boss-backend
1.5.0 kunden-datenpfleger-backend
1.5.1 lipsum
1.6.0 templates basics
namenwahl /extension /absolut /prototype
1.6.1 der erste modulblock
einfache ausgabe
1.6.2 modulblock in form bringen
sortierung /gruppierung /filter /limitierung
1.6.3 templates verlinken
variablen /verlinkung /dateistruktur basics
1.6.4 templates sparen /bedingung
1.6.5 einfache eingabe

2.0.0 alles über module
2.1.0 spezial felder
2.2.0 hint features

3.0.0 spezielle funktionen
3.1.0 ausgabe tricks
wrap fragment no_
3.2.0 datums funktionen
3.3.0 shop funktionen
3.4.0 mail funktionen
3.5.0 poll funktionen
3.6.0 memberarea


.

0.0.2 Vorwort

(...ein kurzes)


KWML ist eine simple und schnelle Meta- Skriptsprache speziell für Webentwicklungen. KWML läßt sich in HTML einbinden. Seine Syntax ist kurz gehalten und einfach zu erlernen. Das Hauptziel ist Webentwicklern die Möglichkeit zu geben in dynamisch generierte Webseiten zu erzeugen.
Und das in kürzester Zeit.


Dieses Handbuch besteht vorranging aus einer Funktionsreferenz, enthält aber zusätzlich auch ein Tutorial, Erklärungen zu den wichtigsten Features und andere ergänzende Informationen.

.

0.0.3 Allgemeiner Ablauf




Der Designer erstellt Module und
gestaltet Templates in denen er die Position der Module definiert.

Module: Ein Modul enthält Informationen (Texte, Bilder, Files, Anweisungen, ...), die auf der Webseite gezeigt werden sollen. Der Kunde kann in den Modulen Einträge erzeugen, bearbeiten und löschen. Somit bestimmt er den Inhalt der Seite.

Modulblock: Darstellungseinheit eines bestimmten Moduls im Template. Im Grunde eine Anweisung an die Datenbank gewisse Inhalte (Texte, Bilder, Files, ...) auszugeben.
Jedes Modul, das am Beginn des Projektes definiert wird kann beliebig(!) viele Felder enthalten.

Template: Ein Template ist eine einzelne Webseite auf deren Basis alle weiteren automatisch erstellt werden. Wenn man im Template etwas ändert werden die Änderungen auf das gesamte Projekt zugreifen.

Editor: Ein Datenpfleger.






.

1.1.0 Grundsätzliches




Auf diesen Seiten möchten wir Ihnen die Grundlagen von KWML in einem kleinen Tutorial vorstellen. Dieser Text behandelt Punkt für Punkt das Erstellen von dynamischen Web-Seiten mit KWML.

1.1.x Grundsätzliches
1.2.x Module erstellen
1.3.x Kundenaccount erstellen -> Module zuweisen
1.4.x Datenpflegeraccount erstellen -> module zuweisen
1.5.x Daten einpflegen
1.6.x Neues Template, Module zuweisen, Templates stylen

Die grundlegenden KWML-Funktionen werden damit spielerisch erforscht und erlernt.

Der erste Schritt besteht im Erstellen von Modulen
klicken sie zum nächsten kapitel '1.2.0 Module erstellen'



Der ideale Projektverlauf:
1. Websiteentwurf
2. Module erstellen
3. Kundenaccount erstellen
4. Module zuweisen
5. Template stylen

-fertig-

Die Datenpflege kann leicht vom Kunden selbst übernommen werden, sie brauchen einzig einen Kundenaccount anlegen und ihm die richtigen Module zuweisen...

.

1.2.0 Module erstellen




als erstes will man ein modul anlegen

warum? >begriffserklärung

folgen sie erst diesem link
(modules) dann diesem (new module)

es ist gut sich im vorhinein genau zu überlegen wieviele felder benötigt werden. und ob und wieviele felder zum kategorisieren und strukturieren der inhalte benötigt, aber mehr dazu später.

legen sie jetzt zunächst ein simples modul mit ein paar feldern an. man kann nahezu beliebig viele felder erzeugen doch fürs erste reichen vier.

z.b.
string fields: headline,COLORitem
text fields: story
picture fields: pic

es gibt übrigens eine reihe spezialfelder mit besonderen eigenschaften, COLOR z.b. erzeugt im datenpfleger backend eine farbwahlpalete.

welche arten von feldtypen und möglichkeiten vorhanden sind, steht im kapitel '2.0.0 alles über module'.

zunächst aber zum nächsten schritt '1.3.0 kunden erstellen'.
.

1.3.0 Projekt erstellen






Einen neuen Kunden bzw. ein neues Projekt anzulegen ist keine Hexerei.
Wie zuvor können Sie auch hier die Abkürzung nehmen
(neues projekt)

Nehmen sie einen beliebigen Kundennamen, User/Loginnamen und Passwort

Die Felder domain und indextemplate können fürs erste freibleiben. Das zuvor erzeugte Modul muss aber angewählt werden. Jedes neue Modul für einen Kunden muss dem Kunden auf diese Weise zugewiesen werden.

Die letzten beiden Textfelder können auch frei bleiben.

Nun bleibt nur noch das Formular abzusenden und zum nächsten Kapitel '1.4.0 kunden-boss-backend' zu klicken.

.

1.4.0 Kunden-Boss-Backend




das kunden-boss-backend
ist eigentlich nur zum anlegen der datenpfleger und ein paar anderer administrativer tätigkeiten da (z.b. zugriffs statistik etc.).

noch befinden sie sich vermutlich nicht dort.
um hinzukommen klicken sie im objektbaum auf den kundennamen und danach auf BOSS-login(die türe mit dem 'B' drauf).
statt über die startseite zu kommen erspart dieser link das eintippen der logindaten des kunden und ist quasi eine abkürzung.

dort angelangt erstell wir zunächtst einen (datenpfleger) account. hier sind wieder beliebige werte einzusetzten.

man kann hier auch bestimmen ob dieser die möglichkeit haben soll alle einträge bearbeiten zu dürfen, oder nur diese welche er selbst angelegt hat.

jetzt muss nur noch das modul (oder die module, wenns mehrere sind) zuweisen, einfach ankreuzen. im normalfall geht das popup automatisch auf, (eine browser einstellung könnte das blocken) ansonsten ist der link eben manuell zu öffen.

nun kann es weiter gehen zum abschnitt '1.5.0 Datenpfleger-backend'. hier gibt es wieder eine abkürzung, nämlich wie schon vieleicht vermutet, der login link.

.

1.5.0 Datenpfleger-backend




hier also das modul auswählen und ein paar einträge machen.es sollten mindestens vier sein.

als erleichterung hier zum kopieren und einfügen, etwas blindtext:

Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

das lässt den eintrag später besser aussehn als 'rvwrvwnrt wrtv rjrjtvrvwjrtv' ist ja zudem auch ganzschön arbeit.

wenn das getan ist gehts eigenlich weiter zum bisher spannendsten teil '1.6.0 template basics', das erstellen von seiten mit KWML code drinn.

.

1.6.0 KWML Template basics




jetzt müssen wir wieder zurück zum objektbaum.
beim klick auf den kundennamen entpuppt sich der unterpunkt link 'neues template'.

hier ist in erster linie der templatename und die modul zuweisung nötig.

(doch der vollstängikeit halber: das bildverzeichniss ist für statische bilder des templates und absoluter templatepfad ist für templates die auf anderen servern liegen, wovon aus geschwingigkeitsgründen abzuraten ist)

bei der nameswahl ist eine dateierweiterung nur bei anderen content-types notwendig (z.b. .xml, .wml, etc.)
aber nennen wir es doch einfach news.html

prototype sollte auch angeklickt sein. Das sorgt für nichts anderes, als das ein simpler beispielcode ins template eingefügt wird, was etwas tipparbeit erspart.

ok, '1.6.1 der erste modulblock'


.

1.6.1 Der erste Modulblock




dem prototype-häkchen ist zu verdanken das da jetz bereits schon was drinnsteht.

wie sie sehen können sind in geschwungen klammern die feldnamen angegeben. genau an dieser stelle werden dann vom KWML output/ die vom datenpfleger eingegebenen inhalte eingefügt.

die '#'-gitter gezäunten anweisungen sind KWML tags, in dem fall zweimal die gleichen. Diese markieren oder bezeichnen den anfang und das ende eines modulblocks.

#modul=...# -anweisung ist die zentralste
aller anweisungen um die es sich bei KWML dreht.
das diese anweisung hier in HTML-kommentar-tags steht ist nicht erfordelich, sondern vereinfacht lediglich die gestaltung.

um zu sehen wie dieser modulblock aussieht klicken sie auf 'übernehmen und anzeigen'.

das sieht jetzt ziemlich roh aus, jetzt gibt es 3 möglichkeiten zur gestallung der seite.
klicken sie zunächst auf den tempatenamen (news.html) im objektbaum um wieder zurück zu kommen.

sie können jetzt entweder den text kopieren und den webeditor ihrer wahl benutzen, und nach dem gestallten zurückkopieren, oder den eingebauten wysiwyg editor (wysiwyg-link) benutzen. die dritte möglichkeit ist das direkte editieren der html-datei im browser unter zuhilfename der textbausteine.

getallten sie nun ein bisschen den modulblock oder setzten sie eventuell auch was davor oder danach.

im nächsten schritt wollen wir den '1.6.2 modulblock manipulieren'.



.

1.6.2 Modulblock manipulieren




probieren sie jetzt ein paar funktionen zur beeinflussung der ausgabe aus.

da gibt es die möglichkeit z.b.

die ausgabe sortieren
#order by headline# ,oder absteigend sortieren
#order by headline desc#

oder

#limit 1# in kombination mit #order by rand()#
gibt nur einen, zufällig gewählten eintrag aus.

diese anweisungen können irgentwo innerhalb des modulblocks stehn und werden natürlich in der ausgabe nicht angezeigt.

z.b.:

#modul=testnews##order by headline#
{headline}<br><br>
{text}
#modul=testnews#


es gibt natürlich mehr möglichkeiten (angeführt in Referenz->KWML Basic) aber fürs erste genügt das.

als nächstes möchten wir seiten verlinken
&#039;1.6.3 Templates verlinken&#039;
.

1.6.3 Templates verlinken




anders als bei HTML seiten braucht man für eine folgeseite nicht unbedingt eine neue datei erstellen. eine auswahlseite und eine auswahl-darstellungsseite ist in ein und dem selben template möglich.

das linkziel des templates steht unten rechts neben dem reset button (z.b. ../output/?e=123&page=news.html was eine verkürzte schreibweise für http://kwml.net/output/?e=123&page=news.html oder http://kundendomain.com/output/?e=123&page=news.html ist).

der auswahl modulblock:

#modul=testnews#
<a href="../output/?e=123&page=news.html&a={headline}"> {headline}</a>
#modul=testnews#

das geht auch verkürzt mit #l=
(entspricht ../output/?e=123&page)

#modul=testnews#
<a href="#l=news.html&a={headline}"> {headline}</a>
#modul=testnews#

nun zum auswahl-darstellungs-block

#modul=testnews##inlineget headline={a}#
<b>{headline}</b><br>
{text}<br><br>
#modul=testnews#

wie vieleicht bekannt können über eine webadresse variablen übergeben werden. das fragezeichen markiert den beginn der variablenangabe, die variable &#039;e&#039; benötigt die projekt bzw. kunden-nummer und &#039;page&#039; den namen des anzuzeigenden templates. das &#039;&&#039; fungiert als kleber. zusätzlich hinzugefügt wurde &#039;a&#039; als variable zum bestimmen des anzuzeigenden eintrags. im template wird {a} ausgetauscht gegen den in der url angegebenen (&a=)wert ausgetauscht. andere möglichen buchstaben wären
{b},{c},{d},{f},{g},{h},{i} und {j}.

vernünftiger im obigem beispiel wäre das verlinken und filtern per {id}. jeder moduleintrag besitzt neben den von ihnen definierten feldern noch zwei zusätzliche.
{owner} der name des datenpflegers und {id} dessen inhalt einen eintrag eindeutig identifiziert (z.b. könnten ja zwei verschiedene texte die gleiche headline besitzen)
das gesamte beispiel sähe damit so aus

#modul=testnews#
<a href="../output/?e=123&page=news.html&a={id}"> {headline}</a>
#modul=testnews#
<hr>
#modul=testnews##inlineget id={a}#
<b>{headline}</b><br>
{text}<br><br>
#modul=testnews#

Optional:

es gibt noch eine möglichkeit zu einem template zu verweisen ohne &#039;?&#039; und &#039;&&#039; zu gebrauchen, nämlich
http://kwml.net/o.php/123/news.html oder http://kundendomain.com/o.php/123/news.html
die variablen übergabe entspricht dann
o.php/e/page/a/b/c/d/e/f/g/h/i/j. wolleten wir im obigem beispiel die variable {c} verwenden entspräche das
http://kundendomain.com/o.php/123/news.html/~/~/{headline}
leere variablen werden also mit &#039;~&#039; als platzhalter übergeben.

.

#inlineget (feldname)=(wert)#

Ausgabe filtern mit #inlineget (exakt)


Funktion:

#inlineget (feldname)=(wert)#

Um die Ausgabe auf ganz bestimmte Einträgen zu beschränken/filtern verwendet man &#039;inlineget&#039; in der Moduldefinition.
Nur die Einträge werden ausgegeben, wo der feldname exakt folgenden (wert) enthält.

[zB.#inlineget farbe=rot# -> nur Einträge in denen das Feld &#039;farbe&#039; den wert &#039;rot&#039; haben, werden angezeigt.]


Ausgabe wenn das Feld nicht leer ist
#inlineget (feldname)=NOTNULL#


NOTNULL
als wert kann auch NOTNULL angegeben werden
in dem fall werden alle einträge ausgegeben wo das angegebene feld keinen leeren wert enthält.

Beispiel:



hier werden nur die news ausgegeben die alice verfasst hat.

#modul=test_news#
#inlineget autor=alice#
{headline} {autor}
<br>
{text}
<br><br>
#modul=test_news#

oder mit NOTNULL,

#modul=test_news#
#inlineget autor=NOTNULL#
{headline} {autor}
<br>
{text}
<br><br>
#modul=test_news#

hier werden nur die news ausgegeben wo der autor seinen namen eingetragen hat.

möchte mann alle einträge welche nicht von alice eingetragen wurden, dann &#039;!&#039; vor &#039;=&#039; verwenden.

#modul=test_news#
#inlineget autor!=alice#
{headline} {autor}
<br>
{text}
<br><br>
#modul=test_news#

und um Grössen von Zahlen zu vergleichen mit &#039;<=&#039; kleiner-gleich und &#039;>=&#039; grosser-gleich, schreibt man so...




#inlineget alter>=20# oder
#inlineget alter<=30#

oder mit &#039;<&#039; kleiner und &#039;>&#039; grosser...

#inlineget alter>20 and 1=1# oder
#inlineget alter<30 and 1=1# oder
#inlineget alter>20 and alter<30 and 1=1#
.

#is (variable)#

Bedingte Blockverarbeitung


Funktion:

#is (variable)#

Verarbeitet einen Block nur wenn die angegebene Variable einen gültigen wert enthält.
Gegenstück davon ist #isnt (variable)#

Beispiel:



#modul=news##is {a}#
<b>{headline}</b><br>
{text}
#modul=news#

Dieser Block wird nur ausgegeben wenn {a} irgendeinen wert enthält.

.

#isnt (variable)#

Bedingte Blockverarbeitung


Funktion:

#isnt (variable)#

Verarbeitet einen nur Block wenn die angegebene Variable keinen Wert enthält.
Gegenstück davon ist #is (variable)#

Beispiel:



#modul=news##isnt {a}#
<b>{headline}</b><br>
{text}
#modul=news#

Dieser Block wird nur ausgegeben wenn {a} keinen Wert enthält.

.

#like (feldname)=(wert)#

Ausgabe filtern mit #like


Funktion:

#like (feldname)=(wert)#

Mit like können Einträge ausgegeben werden, wo nur ein Teil des werts bekannt ist [zB. es sollen alle Einträge des Felds Farbe, wo Blau vorkommt -hellblau,blaugrau,dunkelblau... - angezeigt werden]

#like farbe=blau#

.

#limit (n)#

Ausgabe limitieren


Funktion:

#limit (n)#

will man z.b. nur 5 einträge ausgeben lassen
verwendet man &#039;limit&#039; innerhab des modulblocks.
n ist die anzahl auf die die ausgabe limitiert werden soll.

Beispiel:



dieses beispiel zeigt die darstellung ner neuesten fünf einträge.

#modul=test_news#
#order by newsdatum desc#
#limit 5#
{headline} {newsdatum}
<br>
{text}
<br><br>
#modul=test_news#


.

#modul=(Modulname)#

Einfache Ausgabe


Funktion:

#modul=(Modulname)#

zur ausgabe von Modulinhalten
werden in den templates die auszugebenden werte in sogenannte modulblöcke gesetzt.

das sieht im einfachtsten fall z.b. so aus:

<html>
<body>
Hier die news...<br>
<!--Modulanfang-->
#modul=test_news#
{headline}
<br>
{text}
<br><br>
#modul=test_news#
<!--Modulende-->
<img src=../phx.php?e=33&title=kwml.help.trash.Erste+Schritte border=0></body>
</html>
.

#notlike (feldname)=(wert)#

Ausgabe filtern mit notlike


Funktion:

#notlike (feldname)=(wert)#

gleich wie like nur eben umgekehrt d.h. diesen wert dürfen die einträge nicht haben um angezeigt zu werden.
.

#order by (feldname)[ desc][+0]#

Sortierung der Ausgabe


Funktion:

#order by (feldname)[ desc][+0]#

zur sortierung der ausgabe wird die &#039;order by&#039; anweisung
innerhab des modulblocks plaziert

Optional:

desc

desc steht für descending und heisst absteigend.
mit diesem zusatz wird die reihenfolge umgedreht

Beispiel:



#modul=test_news#
#order by newsdatum#
{headline} {newsdatum}
<br>
{text}
<br><br>
#modul=test_news#

oder,

#modul=test_news#
#order by newsdatum desc#
{headline} {newsdatum}
<br>
{text}
<br><br>
#modul=test_news#

um eine natürliche folge bei feldern mit zahlen zu erhalten sollte +0 angefügt werden

#order by age+0# oder
#order by SORTING+0#

.

#order by rand()#

Zufallsausgabe


Funktion:

#order by rand()#

um eine zufällige reihenfolge zu erzeugen wird die &#039;order by rand()&#039; anweisung
innerhab des modulblocks plaziert


Beispiel:



#modul=test_news#
#order by rand()##limit 1#
{headline} {newsdatum}
<br>
{text}
<br><br>
#modul=test_news#

dieses Beispiel gibt einen zufälligen News-Eintrag aus.

.

#setcounter#

Counter installieren


Funktion:

#setcounter#


setzt einen counter in form eines unsichtbaren gifs
positioniert wird der tag am ende eines templates
nach den darin enhhaltenen modulblöcken.

zur identifizierung des hits wird der inhalt des title-htmltags dazu abgespeichert.

d.h. für seiten mit counter wird der title
im idealfall mit statischen oder dynamischen feldnamen
ausgestattet.


.

Variablen




als Variablen gelten

{a},{b},{c},{d},{e},{f},{g},{h},{i} und {j}
geeignet vorallem für die Variablenübergabe per URL oder Formulare.

Ansonsten gibt es die jeweiligen Modulfeldnamen

{feldname}

Sonderformen:

{newid} erzeugt eine einmalige Zeichenkette

{blockcounter} zeigt die Ordnungszahl eines Eintrags.

{feldname_HEIGHT} und {feldname_WIDTH}
ergeben bei Bildfeldern die Breite und Höhe in Pixeln
{feldname_THUMB}?resize(n)
erzeugt Thumbnails in n Pixel breit.

{feldname_FILENAME} zeigt bei Dateifeldern nur den Dateinamen an (ohne Pfad)

Datumsformatierung
{_min} Minuten: "00" bis "59"
{_hour} Stunde im 24-Stunden-Format: "00" bis "23"
{_sec} Sekunden: "00" bis "59"
{_day_x} Tag des Monats ohne führende Null: "1" bis "31"
{_day_xx} Tag des Monats, 2-stellig mit führender Null: "01" bis "31"
{_weekday}Donnerstag ausgeschriebener Tag der Woche z.B. "Montag"
{_mon_x} Monat ohne führende Null: "1" bis "12"
{_mon_xx} Monat: "01" to "12"
{_mon_name} Januar Monat als ganzes Wort z.B. "Juli"
{_year_xx} Jahr als zweistellige Zahl, z.B. "99"
{_year_xxxx} Jahr als vierstellige Zahl, z.B. "1999"


Rechnen mit Variablen:
die Variablen h und i können zum addieren und subtrahieren benutzt werden
{_calc{h}plus5} oder {_calc{i}minus3}

Beispiel:

<a href="#l=index&h={_calc{h}minus1}&i={_calc{i}minus1}">« zurück</a> | <a href="#l=index&h={_calc{h}plus1}&i={_calc{i}plus1}">vor »</a>




.

Daten einbinden mit Blockinclude


Funktion:

# blockinclude (url)#

bindet an der stelle externe (html)dateien in den html-code innerhalb eines blocks ein.
(wenn benötigt {encode...} statt #encode...# verwenden)


Beispiel:



# blockinclude http://xyz.com/info.htm#

oder templates

# blockinclude http://localhost/output/?e=1&page=xyz&a={id}&b={encode{name}}#
.

#filelink ...#

Download-Felder Ausgabeformatierung


Funktion:

#filelink [linktext] {(Datei Feldname)_FILENAME}#

fileink wir verwendet für die ausgabe von dateifeldern

Optional:
linktext zur bescheibung des links z.b. &#039;Download here oder so:&#039;.

Beisielp:

#filelink Download:<a href="{datei}">{datei_FILENAME}</a>#

wird keine datei dem eintrag hinzugefügt
wird der link samt &#039;Download:&#039; nicht angezeigt
.

#findrep (gesuchtes),(ersatz)#

Suchen und ersetzen


Funktion:



Sucht nach (gesuchtes) und ersetzt es mit (ersatz) innerhalb eines Modulblocks.

Soll nach einem Beistrich gesucht werden
verwendet man comma
(z.b. #findrep comma,<br># statt #findrep ,,<br>#)

Beispiel:



#findrep kwml,kwml(rulez!)#

.

#fragment [feld] [wert]#

Kürzt Textausgaben


Funktion:

#fragment [feld] [wert]#

Kürzt Textausgaben von Textfeldern innerhalb von Modulblöcken.

Beispiel:


#fragment text 400#
{text}

Vom Feld {text} werden dadurch nur die ersten 400 Zeichen ausgegeben.
.

#include (url)#

Daten einbinden mit include


Funktion:

#include (url)#

bindet ausserhalb von blöcken an der stelle externe (html)dateien in den html-code ein.
innerhalb verwenden sie bitte blockinclude


Beispiel:



#include http://url.com/der_include_datei.htm#

oder templates

#include http://kwml.net/output/?e=55&page=test.htm&a=xyz#

oder nur template codeinhalt

#include *test.htm#


.

#linkwizard[ linktext]#

Automatisches verlinken


Funktion:

#linkwizard[ linktext]#


plazierung: irgentwo im template


erzeugt automatisch hyperlinks in der Ausgabe der Textfelder eines Moduls.

betroffen(verlinkt) werden dadurch alle emailadressen

sowie webadressen die mit http:// anfangen

Optional:

linktext

wird ein linktext angegeben, wird nicht die adresse selbst verlinkt sondern das wort das als linktext eingesetzt wurde.


Beispiel:



#linkwizard#
erzeugt aus http://test.at

<a href=http://test.at>http://test.at</a>


und #linkwizard click here#
erzeugt aus http://test.at

<a href=http://test.at>click here</a>


.

#nobreak #

Umbrüche entfernen


Funktion:

#nobreak#

soll innerhalb eines modulblocks die ausgabe von <br> verhindert werden, plaziert man &#039;nobreak&#039; innerhalb eines modulblocks

.

#no_(feldname)#

Leere Feldausgaben unterdücken


Funktion:

#no_(feldname)#

Hilft beim erzeugen von HTML-Pseudotags
im falle eines leeren feldes.

Beispiel:



<#no_pic#img src={pic}><br#no_pic#>

...ergebnis im fall eines leeren bildfeldes...

<noimg src={pic}><brno>

beide tags sind damit ungültig und werden nicht angezeigt.



.

#showhtmltags#

verhindert html-tags bei ausgabe durch sichtbarkeit


Funktion:

#showhtmltags#

enthält ein (von einem editor angelegten) eintrag eines moduls html-anweisungen, werden diese normalerweise ausgeführt.
soll das verhindern werden plaziert man #showhtmltags#
innerhalb eines modulblocks des templates.
das macht html-tags sichtbar und dadurch natürlich auch
inaktiv.

eine ausnahme möglichkeit für einzellne einträge bietet


trägt ein editor diesen kommentar in das textfeld ein werden html-tags seines eintrags dennoch ausgeführt.

in verbindung mit #showhtmltags# verhindert zusatzlich kwml-tags. aus # wird #, aus { wird { , usw.

.

#sslonly#

Nur sichere Verbindungen zulassen


Funktion:

#sslonly#

diese funktion bricht unsichere Verbindungen zum Client ab
der aufruf des templates wird nur per https erlaubt.

(untestet)

.

#wrap#

Periodische Ausgaben und Zellenumbrüche


Funktion:

#wrap##wrapfactor 2#(...html-code...)#wrap#

fügt innerhalb eines modulblocks,
zwischen beiden -anweisungen,
periodisch html code ein.
bestimmt wird die periodenanzahl durch .
also (n) für 1 bis 65575.

Beispiel:



#modul=test#
<font #wrap##wrapfactor 2# color="green" #wrap#>{headline}</font><br>
#modul=test#

damit würde jede zweite headline grün aussehn.

ein anderes anwendungsbeispiel wäre z.b. ein zeilenumbruch
bei tabellen.

<table>
<tr>
#modul=test#

<td>{headline}</td>
#wrap##wrapfactor 4# </tr><tr> #wrap#

#modul=test#
</tr></table>

alle 4 spalten wird damit eine neue row (zeile) erzeugt.



.

<!--#noresult (...)#-->

Leere Ergebnisse kommentieren


Funktion:

<!--#noresult (...)#-->

findet ein template keine daten zur ausgabe
kann ein fehler text ausgegeben werden, z.b. &#039;keine einträge gefunden&#039;.
plaziert wird das nach dem modulblock-ende tag.

&#039;noresult&#039; muss in html kommentar stehn.

befinden sich mehrere modulblöcke in temlplate,
sollten alle die davor ausgegeben werden ein noresult drannngehängt haben.
wenigstens ein pseudo z.b. <!--#noresult #-->



Beispiel:


<!--#noresult keine einträge gefunden#-->
.

Einleitung




KWML Formprops ermöglichen das Verändern
von Aussehen und Verhalten der Datenpflegeroberfläche und dessen Formulare.

Diese definitionen werden in das Feld Formulareinstellungen in den Kundeneinstellungen eingetragen.
.

Liste der Einstellungsmöglichkeiten




Feldstyle ändern
[modulname.textfield.height=n]
[modulname.textfield.width=n]
[modulname.stringfield.width=n]

Feldtyp auf radio setzten
[modulname.stringfield.type=radio]

Radiofeld vordefinieren
[modulname.stringfield.radiovalues=v,v,v,...]

Radiofeld Umbruch aktivieren
[modulname.stringfield.radiowrap=true]

Feldinhalt vordefinieren
[modulname.stringfield.defaultvalue=v,v,v,...]

Feldinhalt um n erhöhen
[modulname.stringfield.autoincrement=n]

Autoincrement nach gewählter Kategorie aktivieren
[modulname.field.CATEGORYautoincrement=true]

Kategoriefeld vordefinieren
[modulname.CATEGORYfield.CATEGORYvalues=v,v,v,...]

Kategoriefeld sperren (kein kategorie hinzufügen möglich)
[modulname.CATEGORYfield.locked=true]

Felderanzeige in der Liste deaktivieren
[modulname.feldname.view=false]

Sortierung der Einträge verändern (aufsteigend)
[modulname.list.sort=field]

Sortierung der Einträge verändern (absteigend)
[modulname.list.sort=field desc]

Eine Kategorie für die Liste vorauswählen
[modulname.field.defaultcategory=]

Templates in Editoroberfläche in Menü linken
[editorname/all.extraitem.itemname=src]

Modul beschreibung für Editor
[modulname.overall.description=]

Feld beschreibung
[modulname.fieldname.description=]

Upgeloadete .avi .mov .mpg automatisch in .flv umwandeln
[modulname.files.flvconvert=true/options]

entweder man setzt true (standart)
oder options (z.b. -s320x240 -b200)
-s wie size
-b bitrate Kbit/s

rekursive submodule zulassen
[modulname.submodule.recursive=true]

für editoren die auf IE5 MAC bevorzugen
[werner.spleen.mode=on]

datenplegern das gegenseitige dateiüberschreiben verhindern
[modulname.dateifeldname.prefix=user]
oder
[modulname.dateifeldname.prefix=random]

datenpfleger logout redirect
[all.logout.redirect=url]
.

Einleitung




Schemas sind komplexere interaktive Taggings.
Sie emöglichen das einfügen von ganzen Anwendungen wobei dem Designer die Möglichkeit gegeben wird den generierten Code in bestimmter Form anzupassen.
Hier wird beschrieben wie solche Taggings und dessen Formularelemente erzeugt.


.

Schemas erzeugen




Zum erzeugen von Taggings klicken sie im Template-editor auf &#039;edit taggings&#039;.
Wählen Sie einen Namen und dann &#039;KWML schema&#039; an.

Im wesentlichen bestehen die Schema- form- konstruktions- Definitionen aus solchem Syntax:
[[[TYP|PLATZHALTER|ERKLÄHRUNG]]]

Es gibt 4 Typen:

text (gibt nur einen Text aus. Kein Platzhalzer)

ask_text (erzeugt ein Textfeld. Ersetzt Platzhalzer)

ask_option (erzeugt JA/NEIN Radiobuttons, löscht Platzhalzer bei nein)

ask_select_field (erzeugt Radiobuttons zur Auswahl eines Feldnamens aller Feldtypen)

Gleiches für spezielle Feldtypen:
ask_select_strfield
ask_select_txtfield
ask_select_picfield
ask_select_filefield

Um in ask_option oder in ask_select_field ask_text-Ergebnisse einzufügen, benutzen sie ::

Hier ein Beispiel das Sie vom anwenden bestimmt schon kennen und eigentlich alle Möglichkeiten veranschaulicht:

[[[text||<h1>einfache Ausgabe</h1>]]]
[[[ask_option|#limit :limitn:#|limitieren?]]]
[[[ask_text|limitn|wenn limitieren, auf wieviel?]]]
[[[ask_select_field|orderfield|sortieren?]]]

#modul=[kwmlmod]##order by [orderfield]#[#limit :limitn:#]
[allfields]
#modul=[kwmlmod]#

Weiters gibt es noch vordefinierte Platzhalter*:

[kwmlmod] gibt den gewählten modulnamen

[kwmlpage] gibt die relative Templateurl

[kwmlpagename] gibt den aktuellen Templatenamen

[e] gibt die aktuelle Kundennummer

[allfields] zeigt alle Felder

[allfieldsbr] zeigt alle Felder inkl. Umbrüche

(*diese sollten allerdings nicht mit ask_text gefragt werden)
.