Hallo Anna,
Code:
wrap (
<table border="1"> <tr> <td>| </td> </tr> </table>
) Diese Variante mit den Klammern ist sinnvoll wenn man mehrere Zeilen ausgegeben haben möchte. Man könnte es auch noch anders schreiben und dadurch mehr Zeilenumbrüche im HTML-Quelltext erzeugen:
Code:
wrap (
<table border="1">
<tr>
<td> | </td>
</tr>
</table>
) Für die so erzeugten Zeilenumbrüche kenne ich keine Notationsvariante ohne Klammern.
Deine Beispiele bzw. Codeschnipsel habe einen gravierenden Mangel: irgendwo baust Du immer einen kleinen Fehler ein, z.B. wäre folgende Zeile falsch, wenn ich den rot markierten Text nich eingefügt hätte:
Code:
<table border="1"> <tr> <td> | </td> </tr> </table>
Ich empfehle dringend, daß Du den Code nicht immer neu aufschreibst sondern geprüften Code einfach kopierst, dann kann das gar nicht passieren. Du machst Dir die Arbeit sonst unnötig schwer.

Zitat von
Anna Nun wollte ich aber Rahmen um jedes Element.
Ohne Marker ging das so :
(Vollständiger Code; jeder Content wird umschlossen durch gelben Rahmen, alles auf gelbem Hintergrund; damit die Rahmen nicht aneinanderkleben ein <br> dazwischen)
seite = PAGE
seite.typeNum = 0
seite.10 = CONTENT
seite.10.table = tt_content
tt_content = COA
tt_content {
wrap = <table border="1" width=300> | </table>
10 = TEXT
10.field = header
10.wrap = <td bgcolor="yellow" > <font color="red"> | </font> <br> <br>
20 = TEXT
20.field = bodytext
20.wrap = | </td> <br>
}
Hier implizierst Du, daß der Code funktioniert. Hast Du das getestet? Mir erscheint er nämlich unlogisch und damit falsch.
Als grundlegende Erklärung dazu folgendes:
Es gibt eine Datenbanktabelle mit dem Namen "tt_content". Diese Tabelle wird verwendet um normale Seiteninhalte zu speichern und auszulesen.
Ausserdem gibt es ein Objekt mit dem gleichen Namen "tt_content". Das ist definiert in dem statischen Template der Erweiterung css_styled_content.
Diese Namensgleichheit kann gerade bei Anfängern zu Verwirrung führen und auch zu Verständnisschwierigkeiten beim TS-Code führen.
Möchte man die Inhalte der Datenbank per TS direkt auslesen kann man auf Begriffe zugreifen, die Bezug zur Datenbank herstellen, dazu gehört auch das Objekt "table".
Jetzt noch etwas anderes Grundsätzliches:
Die Definition bestimmter Inhalte in TS kann man natürlich immer vornehmen, indem man direkten Bezug zu dem Seitentemplate nimmt indem man z.B. schreibt:
Code:
page=PAGE
page.typeNum = 0
page.10 = TEXT
page.10.value = Hallo Welt!
Sinnvoll ist das aber nicht, da man den Code nicht wiederverwenden kann ohne Ihn jeweils anpassen zu müssen.
Besser ist folgendes Vorgehen:
Code:
temp.Inhalt = TEXT
temp.Inhalt.value = HALLO WELT!
page = PAGE
page.typeNum = 0
page.10 < temp.Inhalt
Was in meiner Variablen bzw. dem Objekt "temp.Inhalt" jetzt gespeichert wird ist erst einmal unwichtig, das kann man später noch ändern oder man kann weitere Objekte anlegen die man stattdessen oder zusätzlich anzeigen kann.
Wichtig ist die Vorgehensweise, die Objekte erst einmal als geschlossene Einheiten zu definieren. Dann kann man darauf gezielt zugreifen, braucht sie nur einmal zu definieren und kann sie in einzelnen Templates auslagern.
Bezugnehmend auf Dein Seitentemplate kann man ebenso verfahren:
Code:
/* erst einmal definieren wir das Inhaltselement */
temp.INHALT = CONTENT
temp.INHALT {
table = tt_content
select.orderBy = sorting
select.where = colPos = 0
wrap = <table border="1" width=300> | </table>
}
/* Jetzt erzeugen wir die Seite und die entsprechenden Elemente */
seite = PAGE
seite {
typeNum = 0
bodyTag = <body bgColor = "#DDDDDD">
stylesheet = fileadmin/style.css
meta.AUTHOR = Robert Meyer
meta.DESCRIPTION = Hier steht eine Beschreibung
10 = TEMPLATE
10.template = FILE
10.template.file = fileadmin/vorlage01.html
10.workOnSubpart = DOKUMENT
10.marks {
/* Jetzt kopieren wir das Objekt temp.Inhalt in die Seite */
INHALT < temp.INHALT
} INHALT und temp.INHALT
sind zwei verschiedene Objekte. Das erste lautet ausgeschrieben:
seite.10.marks.INHALT und ist ein Element aus dem statischen Seitentemplate.
Das zweite Objekt temp.INHALT ist eine temporäre Variable in die ich per TS jeden beliebigen Inhalt einlesen kann. Das kann statischer Text sein (Hallo Welt!), ein dynamisches Menü oder der jeweilige Seiteninhalt, wie er in der Datenbank gespeichert wurde. Was die Variable speichert, hängt von dem TS-Code ab.
Einen Bezug zwischen den beiden Objekten stellt erst die Zeile INHALT < temp.INHALT her, wo das Objekt temp.Inhalt in das Template-Element seite.10.marks.INHALT kopiert wird.
So, jetzt habe ich die Basis erläutert, die wir für Deine Frage brauchen.
Du woltest ein temporäres Objekt erzeugen, das die Inhalte dynamisch aus der Datenbank ausliest und hast ihm den Namen tt_content gegeben.
Ich ändere den Namen jetzt, damit Du es besser unterscheiden kannst in temp.tt_content:
Code:
temp.tt_content = COA
temp.tt_content {
10 = TEXT
10.value = Hallo Welt!
} Als Inhalt gebe ich erst einmal eine reine Textausgabe an, das wird später noch geändert.
Jetzt kannst Du erst einmal das Objekt temp.tt_content in Dein Seitentemplate kopieren:
Code:
seite.10.marks.INHALT < temp.tt_content
... und überprüfen, ob die Ausgabe richtig generiert wird.
Jetzt können wir das Objekt temp.tt_content nach unseren Bedürfnissen erst einmal optisch anpassen:
Code:
temp.tt_content = COA
temp.tt_content {
wrap = <table border="1" width=300> <tr><td bgcolor="yellow" ><font color="red">|</font></td></tr> </table>
10 = TEXT
10.value = Hallo Welt!
} Nun können wir die gesamten Inhalte aus der Datenbank auslesen und einfügen:
Code:
temp.tt_content = COA
temp.tt_content {
wrap = <table border="1" width=300> | </table>
10 = CONTENT
10.table = tt_content
10.select.orderBy = sorting
10.select.where = colPos = 0
10.wrap = <tr><td bgcolor="yellow" ><font color="red">|</font></td></tr>
} Da der gesamte Inhalt in das Objekt temp.tt_content.10 eingelesen wird, ist es momentan unerheblich ob man temp.tt_content.wrap und temp.tt_content.10.wrap aufteilt, man könnte auch alles wie im vorherigen Beispiel nur durch temp.tt_content.wrap = <table border="1" width=300> <tr><td bgcolor="yellow" ><font color="red">|</font></td></tr> </table> ausgeben und hätte die gleiche Wirkung.
Jetzt wollen wir die Inhalte getrennt auslesen und müssen den Code verändern:
Code:
temp.tt_content = COA
temp.tt_content {
stdWrap.wrap= <table border="1" style="margin:10px"><tr><td bgcolor="olive" style="padding:20px">|</td></tr></table>
10 = CONTENT
10 {
stdWrap.wrap= <table border="1" width=400 style="margin:20px"><tr><td bgcolor="navy" style="padding:20px">|</td></tr></table>
table=tt_content
select.orderBy=sorting
renderObj=COA
renderObj {
stdWrap.wrap = <table border="1" width=300 style="margin:20px"> | </table>
5=TEXT
5.wrap=<tr><td bgcolor="yellow" style="color:red; padding:5px">|</td></tr>
5.field=header
10=TEXT
10.wrap=<tr><td bgcolor="orange" style="color:blue; padding:5px">|</td></tr>
10.field=bodytext
}
}
} Damit deutlich wird, daß man erstens einzelne Felder auslesen kann und zweitens die Elemente auch mehrfach verschachteln kann - um das zu demonstrieren habe ich mal mehrere Tabellen mit unterschiedlichen Farben integriert. In der Praxis sollte man möglichst auf Tabellen verzichten, da diese die Inhalte meist nicht Barrierefrei darstellen.
Lesezeichen