base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
In diesem Beispiel definieren wir ein neues Tag für "Code-Bereich". In der Dokumentation oder im Forum bei baseportal kommt es ständig vor, dass Code-Teile angegeben werden müssen, also so etwas wie: <b>Code:</b> <code> <h1>Meine Datenbank</h1> <do action=all> </code> Wie bei diesem Beispiel (durch den grauen Hintergrund) möchte man diese Code-Teile herausstellen; es ist übersichtlicher und sieht besser aus. Hinzu kommt: Darin enthaltene HTML-Tags sollen NICHT ausgeführt, sondern inklusive der <c><</c> und <c>></c>-Zeichen dargestellt werden. Dazu ist die Umwandlung in <c><</c> bzw. <c>></c> nötig. Der Quelltext des obigen HTML-Abschnitts sieht also auf der Seite so aus: <code> <b>Code:</b> <div style="background:#f0f0f0;padding:8px"><pre> <h1>Meine Datenbank</h1> <do action=all> </pre></div> </code> Ohne XML-Parser darf man all dies jedesmal per Hand machen - ein extrem mühsamer und fehleranfälliger Weg (Wobei man sicherlich einiges in eine CSS-Klassendefinition auslagern könnte, dies sei hier allerdings dem Beispiel geschuldet). Hinzu kommt: Entschliesst man sich irgendwann die Darstellung zu ändern, so darf man dies an allen entsprechenden Stellen im Text erledigen. Und noch ein Vorteil: Durch mehrere unterschiedliche Definitionen für das neue "code"-Tag lässt sich aus ein und derselben Quelldatei die Ausgabe für verschiedene Formate erzeugen, z.B. einmal für HTML, einmal für WAP, einmal als reiner Text für EMails. So, jetzt zur Praxis: Mit den neuen XML-Funktionen von baseportal ist es jetzt möglich folgendes zu schreiben: <codeparse> <code> <h1>Meine Datenbank</h1> <do action=all> </code> </codeparse> und baseportal erzeugt automatisch das gewünschte Drumherum und ersetzt die <c><</c> und <c>></c>-Zeichen. Dabei ist der Name des neuen Tags "code" völlig frei gewählt, ebenso wie die Funktionalität, wie wir im folgenden sehen werden. Übrigens existiert ein Tag namens "code" bereits im HTML-Standard, es hat aber ausser einem anderen Zeichensatz ("Schreibmaschinenschrift", diesen Effekt kann man ebenso mit <c><tt>..</tt></c> erreichen) üblicherweise keine andere Wirkung. Hier sieht man eine weitere Eigenschaft der neuen Tags: Neuere Definitionen können ältere überlagern, auch bestehende HTML-Tags können neu definiert werden - wer mag, kann sogar die baseportal-internen Tags wie <c>do, loop, include</c> oder <c>perl</c> umschreiben. ;-) Wie sieht nun die Definition der Funktionalität des neuen Tags aus? Oder anders: Was soll es machen? Die Definition ist ganz einfach: <code> <b>Code:</b><div style="background:#f0f0f0;padding:8px"><pre>$_</pre></div> </code> Wichtig ist das <c>$_</c>: Stösst baseportal bei der Analyse eines Templates (dem sog. "Parsing") auf das Tag "code" setzt es den vom <c><code>...</code></c> umschliessenden Text an die Stelle der Definition an der das <c>$_</c> steht. Dann setzt es das komplette Ergebnis an die Stelle des "code"-Tag im Template. Hier der Ablauf im Detail: 1. baseportal "entdeckt" das Tag <c>code</c>: <codeparse> Ein Beispiel. <code> <h1>Meine Datenbank</h1> <do action=all> </code> Weiter mit normalen HTML... </codeparse> 2. Der umschlossene Text wird <c>$_</c> zugewiesen... <code> <h1>Meine Datenbank</h1> <do action=all> </code> 3. ...und an der Stelle von <c>$_</c> in die Definition des <c>code</c>-Tags eingefügt: <code> <b>Code:</b><div style="background:#f0f0f0;padding:8px"><pre> <h1>Meine Datenbank</h1> <do action=all> </pre></div> </code> 4. Der ganze resultierende Text wird jetzt an der Stelle des Tags eingefügt: <code> Ein Beispiel. <b>Code:</b><div style="background:#f0f0f0;padding:8px"><pre> <h1>Meine Datenbank</h1> <do action=all> </pre></div> Weiter mit normalen HTML... </code> 5. baseportal sucht weiter nach definierten Tags, ab der Stelle nach dem eingefügten Text, also genau 1 Zeichen nach dem <c>...</pre></div></c>. <h2>Die Verwendung von Parametern</h2> Nun könnte man sich wünschen, für verschiedene Code-Teile verschiedene Texte auszugeben. Dies erreicht man mit Parametern: <codeparse> <code title="Hinweis"> ... </code> </codeparse> baseportal übernimmt die Analyse und Bereitstellung der Parameter. Diese sind als einfache Variablen in der Tag-Definition verfügbar: <code> <b>$title:</b><div style="background:#f0f0f0;padding:8px"><pre>$_</pre></div> </code> Das ist alles... ;-) baseportal setzt an die Stelle der Variablen automatisch die übergebenen Parameter. Allerdings stellt sich hier ein Problem: Wenn nun KEINE Parameter angegeben werden, wird für die Variablen NICHTS eingesetzt, es steht also ein <c><b>:</b></c>, was unschön aussieht und sicher nicht gewollt ist. Ausserdem will man ja für die Standard-Fälle weiterhin nur <c><code></c> ohne Parameter angeben können. Man benötigt also Standard-Werte, falls nichts übergeben wurde. Das lässt sich mit einer eigenen Programmierung erledigen. <h2>Tags als Programme</h2> Man ist nicht auf einfache Ersetzungen angewiesen, sondern -wie in baseportal üblich- kann auch hier eine komplette Programmierung eingesetzt werden. Das komplette obige Beispiel für das "code"-Tag sieht z.B. so aus: <code> s/</</g; s/>/>/g; $title="Code" if $titel eq ""; out "<b>$title</b><div style=\"background:#f0f0f0;padding:8px\"><pre>$_</pre></div>" </code> Der Reihe nach: <code> s/</</g; </code> Dies ist eine (einfache) "Regular Expression" mit Ersetzung ("Substitute"). Es bedeutet: "Suche ein <c><</c>-Zeichen und ersetze es mit <c><</c>. Mach dies mit allen <c><</c>-Zeichen (durch das <c>g</c> am Ende, es bedeutet global)". Normalerweise muss man die Variable auf die diese Ersetzung wirken soll vorne dran schreiben, z.B. so: <code> $text=~ s/</</g; </code> Da es sich aber um die Variable <c>$_</c> handelt, kann man dies auch weglassen: <c>$_</c> ist eine "besondere Variable" - sie wird immer dann verwendet wenn man man eben keine Variable angibt. So kann man prägnantere Programme schreiben. Der nächste Befehl ersetzt entsprechend alle <c>></c>-Zeichen mit <c>></c>. Die zweite Zeile füllt den Parameter <c>$title</c> mit "Code" falls er leer ist. Der letzte Befehl bestimmt den Text der als Ersatz dienen soll. Er wird mit dem baseportal-typischen <c>out</c> ausgegeben. <h2>Tag-Datenbanken</h2> Wie definiert man nun eigene Tags? Natürlich mit einer Datenbank... ;-) Diese ist eine ganz normale baseportal-Datenbank und enthält die Namen, die Typen und die Codes neuer Tags. Es können mehrere verschiedene Tag-Datenbanken angelegt werden - und somit für verschiedene Zwecke bereitstehen. Um eine Tag-Datenbank auf einer Seite einzubinden, gibt es den Befehl <c>tags</c>: <code> tags "tagdb"; </code> Dieser lädt alle Tags die in <c>datenbank</c> gespeichert sind und wertet die Seite damit aus. <achtung> Da sich der Befehl <c>tags</c> auf die Analyse der Seite auswirkt, muss er VOR der Ausführung der Seite aktiviert werden. Dies geschieht im "Beginn"-Code der Seite. </achtung> Es können auch mehrere Tag-Datenbanken eingebunden werden: <code> tags "tabdb1"; tags "tabdb2"; </code> Die Reihenfolge ist wichtig, denn falls in <i>tagdb2</i> gleichnamige Tags vorkommen, überschreiben diese diejenigen in <i>tag-db1</i>. Sie können allerdings angeben, ob sie dieses Überschreiben wollen: <h2>Gültigkeit von Tags bestimmen</h2> Durch die Angabe <code> tags "tabdb2", "+"; </code> werden nur Tags übernommen, die noch nicht definiert sind. Wichtig ist dies auch bei <c>include</c>: Standardmässig übernimmt eine eingebundene Seite alle Tag-Definitionen. Will man dies nicht, so muss man im <c>include</c> angeben, dass die Tags gelöscht werden sollen: <code> <include src="seite2" tags="*"> </code> Somit sind nur die normalen baseportal-Tags gültig. Will man auch diese Tags verhindern, bedarf es der Angabe: <code> <include src="seite2" tags="-"> </code> Damit sind wirklich überhaupt keine Tags mehr definiert. Die Angabe dieser Parameter ist auch im <c>tags</b>-Befehl möglich. So kann man in einer neuen Seite mit <code> tags "*"; </code> bestimmen, dass, auch wenn diese Seite mit bereits definierten Tags aufgerufen wird, keine Tags ausser den baseportal-Tags ausgeführt werden. Natürlich kann dabei auch gleich eine bestimmte Tag-Datenbank eingebunden werden: <code> tags "tagdb", "*" </code> Hier eine Übersicht: <tab> Parameter|Beschreibung +|Tag nur hinzufügen, wenn nicht schon vorhanden *|Alle bisher definierten Tags löschen, bis auf die baseportal-Tags -|Alle Tags löschen, auch die baseportal-Tags </tab>
Name:
Passwort:
Stichworte:
Version:
1
2
3 Angebot:
Alle
Nur Miete / Lizenz
Nur Miete / Lizenz professional
Nur Miete
Nur Miete smart + pro
Nur Miete smart + pro / Lizenz
Nur Miete pro
Nur Miete ab pure2, smart2, pro1
Nur Lizenz
Nur Lizenz professional
Nur Kostenlos
Ohne Änderungen zurück zur Seite
-
+
©
baseportal
GmbH. Alle Rechte vorbehalten.
powered in 0.01s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!