Ich hab in einem Template folgende Konstanten (im Feld Constants) definiert:
color_adresse_background = #88A3D3
color_adresse_text = #FFFFFF
Im Setup wird eine dynamisch mit dem GIFBUILDER eine Grafik generiert. Hierbei werden die in den Konstanten definierten Farben verwendet ($color_adresse_background und $color_adresse_text).
...
### Adressblock wird als Grafik ausgegeben
ADRESSE = IMAGE
ADRESSE.file = GIFBUILDER
ADRESSE.file {
XY = 350, 160
backColor = {$color_adresse_background}
transparentBackground = 1
### Adresszeile 1
10 = TEXT
10.text = Eine Beispielzeile
10.fontSize = 9.5
10.fontFile = fileadmin/Fonts/verdana.ttf
10.fontColor = {$color_adresse_text}
10.antiAlias = 1
10.offset = 20, 25
}
...
Das funktioniert auch prima. Auf den Unterseiten ändere ich jeweils nur die Konstanten in +ext-Templates.
Jetzt würde ich gerne aber die Farbwerte aus einer Datenbank auslesen und in Abhängigkeit von der pid zuweisen.
Mit der folgenden MySQL-Query könnte ich den Farbwert auslesen.
SELECT value FROM `tx_virtualcss` WHERE `pid`="5" AND `stylesheet`="myStyleSheet" AND `selector`=".address" AND `property`="background-color"
$color_adresse_background soll den Wert "value" erhalten.
Im Moment bin ich völlig orientierungslos, wie ich das realisieren soll.
Muss ich dazu eine Extension schreiben?
Kann mir jemand grob (oder noch besser konkret) einen Lösungsweg aufweisen?
WoK
Hallo WoK.
Via TS kannst Du über die Funktion select eine Tabelle abfragen. Allerdings muss die Tabelle TYPO3 bekannt sein, d.h. im TCA definiert sein.
wok schriebMuss ich dazu eine Extension schreiben?
Jain. Obiges Bekanntmachen ist via (simpler) Extension möglich. Über den Kickstarter kannst Du eine Tabelle erzeugen und die nötigen Definitionen/Deklarationen generieren.
Viele Grüße
Julian
Das geht so
lib.formular = CONTENT
lib.formular {
table = tt_content
select {
where = pid = 6
andWhere {
header_layout = 1
dataWrap = crdate = 1231172336
}
}
renderObj = IMAGE
renderObj {
file = GIFBUILDER
file {
XY = 350, 160
transparentBackground = 1
10 = TEXT
10.text.field = header
10.offset = 20, 25
}
}
}
Nur noch die Tabelle und die Felder anpassen
Hallo freshman17,
ich wollte Dein TS mal ausprobieren, aber irgendwas mache ich falsch. Einen passenden Eintrag in der Tabelle tt_content habe ich angelegt. Wahrscheinlich mache ich nur einen völlig blödsinnigen Fehler ...
page = PAGE
page.typeNum=0
page {
stylesheet = {$css_datei}
10 = TEMPLATE
10.template = FILE
10.template.file = {$content_datei}
10.workOnSubpart = TEST
10.marks.INHALT {
lib.formular = CONTENT
lib.formular {
table = tt_content
select {
where = pid = 11
andWhere {
header_layout = 1
dataWrap = crdate = 1231172336
}
renderObj = IMAGE
renderObj {
file = GIFBUILDER
file {
XY = 350, 160
transparentBackground = 1
10 = TEXT
10.text.field = header
10.offset = 20, 25
}
}
}
}
Hallo Julian,
ich kenn mich mit TS noch nicht so gut aus und auch nicht mit dem Schreiben von Extensions. Bisher habe ich nur in einer vorhandenen Extension herumgebastet.
Gibt es vielleicht irgendeine Extension, an der ich mich orientieren könnte? Ich weiss einfach nicht, wo ich bei einer Extension mit meiner Fragestellung ansetzen soll ... mittlerweile bewundere ich jeden, der ein absolut simple Extension für Typo3 geschrieben hat.
Danke!
Wolle
Da gab's mehrere Probleme:
a) Klammerung fehlerhaft. Du hattest einige Klammer im TS nicht geschlossen
b) lib.formular ist Objekt. Dieses wird zur besseren Übersicht 8und ggf. mehrmaligem Gebrauch) erzeugt und dann dem Marker nur zugewiesen.
Das könnte klappen:
page = PAGE
page.typeNum=0
page {
stylesheet = {$css_datei}
10 = TEMPLATE
10.template = FILE
10.template.file = {$content_datei}
10.workOnSubpart = TEST
10.marks.INHALT < lib.formular
}
lib.formular = CONTENT
lib.formular {
table = tt_content
select {
where = pid = 11
andWhere {
header_layout = 1
dataWrap = crdate = 1231172336
}
}
renderObj = IMAGE
renderObj {
file = GIFBUILDER
file {
XY = 350, 160
transparentBackground = 1
10 = TEXT
10.text.field = header
10.offset = 20, 25
}
}
}
}
Die Extension wäre nur nötig, falls Du die Farbwerte in einer eigenen Tabelle verwalten willst.
Was die Extension angeht: einfach mal die Extension 'kickstarter' installieren. Und dann 'Create new extension' und die Tabelle entsprechend Deinen Wünschen anlegen. Dann das ganze speichern/schreiben lassen. Und dann die Extension im Ext-Manager installieren.
Sollte (in dieser einfachen Form) ohne tieferes Wissen gehen, da Du lediglich die Datenstruktur/Tabelle brauchst, nicht aber irgendeine Ausgabe via FE-Plugin oder BE-Modul.
Viele Grüße
Julian
Hallo Julian,
danke für das angepasste TS. Leider funktioniert das auch nicht. Ich habe den Eindruck, dass am Schluss eine Klammer zu viel ist. Aber auch daran hängt es nicht.
Julian.Hofmann schrieb
Die Extension wäre nur nötig, falls Du die Farbwerte in einer eigenen Tabelle verwalten willst.
Ja, genau das will ich. Das heisst, die Tabelle wird von einer anderen Extension (virtualcss) bereits verwaltet. Auf die Werte aus dieser Tabelle will ich zugreifen (siehe mein ursprüngliches Posting).
Julian.Hofmann schrieb
Sollte (in dieser einfachen Form) ohne tieferes Wissen gehen, da Du lediglich die Datenstruktur/Tabelle brauchst, nicht aber irgendeine Ausgabe via FE-Plugin oder BE-Modul.
Ich glaube, den Zugriff auf die Daten der Tabelle dürfte ich irgendwie hinbekommen (sofern das über PHP erfolgen kann). Ich hab nur keinerlei Plan, wie und wo ich dann in der Extension den Wert value dann dem $color_adresse_background etc. aus dem TS zuordnen kann.
Irgendwie hab ich grade das Gefühl, ich sehe den Wald vor lauter Bäumen nicht mehr ...
Vielen Dank,
Wolle
Du hast doch schon die Lösung! Also ich habe die Tabelle tx_virtualcss nicht kann es also nicht testen. Mit tt_content läufts bei mir. Hier mal ein komplettes TS für eine Testseite.
temp.formular = CONTENT
temp.formular {
table = tx_virtualcss
select {
where = pid = 5
andWhere {
stylesheet = myStyleSheet
dataWrap = selector = .address
dataWrap = property = background-color
}
}
renderObj = IMAGE
renderObj {
file = GIFBUILDER
file {
XY = 350, 160
backColor.field = #Feld aus DB mit Farbe
transparentBackground = 1
10 = TEXT
10.text = Eine Beispielzeile
10.fontSize = 9.5
10.fontFile = fileadmin/Fonts/verdana.ttf
10.fontColor.field = #weiteres Feld aus DB mit Farbe
10.antiAlias = 1
10.offset = 20, 25
}
}
}
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
template = FILE
template.file = fileadmin/template/template.html
workOnSubpart = DOCUMENT_BODY
subparts.MENU < temp.formular
}
page = PAGE
page.typeNum = 0
page.10 < temp.mainTemplate
Hallo freshman17,
danke für das TS. Ich habe es auf meine Konfiguration hin angepasst, aber es will einfach nicht funktionieren. Ich hab keine Ahnung weshalb. Es wird einfach keine Grafik anstelle des Markers ausgegeben.
Sicherheitshalber habe ich auch die beiden Zeilen mit den Datenfeld-Bezeichnern "field" mal rausgenommen und durch die direkte Farbzuweisungen (backColor = #CCCCCC) ersetzt. Auch dann erfolgt keine Grafikausgabe. Auch das zusätzliche Ausklammern des Datenbankaufrufs hat keine Ausgabe gebracht.
Ich hab keine Ahnung, weshalb keine Grafik erstellt wird.
Aber da gibt es auch noch ein anderes Problem:
die Werte für $color_adresse_background und $color_adresse_text befinden sich jeweils in einer eigenen Zeile in der Datenbanktabelle.
Danke für die Hilfe!
Wolle
Hallo,
ich bin jetzt darauf gestossen, woran das Problem lag.
Ich musste das "select" ändern.
table = tt_content
select {
where = pid = 28
}
Ausserdem muss der Wert für pid der aktuellen Seiten-id entsprechen und ein Eintrag mit der pid=28 in der Datenbanktabelle enthalten sein.
Ich versteh das allerdings nicht: Warum kann ich nicht Einträge mit einer anderen pid aus der Datenbank auslesen? Was soll die "where"-Bedingung hier dann überhaupt?
Kann mir das jemand erklären?
Wolle