Hallo zusammen,
ich bin der Neue und noch blutiger Anfänger. :- ) Ich habe jetzt meine ersten 3-4 Seiten fertig und versuch mich jetzt in verschiedenem Neuen. Ich möchte aktuell versuchen die Schriftart im Menü dynamisch / zufällig zu wechseln. Zum Thema Zufallszahl gibt es ja nun nicht soviel und deshalb habe ich mir einen kleinen Workarround gebaut.
Meine Idee ist folgende: Ich habe eine Seite erstellt die als Content die Schriften enthält die verwendet werden sollen. Warum: Hier kann ich Rand() anwenden.
Inhalt 1: fileadmin/templates/fonts/jellyka_estrya_handwriting.ttf
Inhalt 2: fileadmin/templates/fonts/kingthings_spike_regular.ttf
Mein Script dazu sieht wie folgt aus:
## RANDOM
temp.random = TEXT
temp.random.data {
table = tt_content
wrap= |
select {
pidInList = 45
selectFields = header
where = colPos = 0
language = sys_language_id
orderBy = rand()
max = 1
}
renderObj=COA
renderObj{
5=TEXT
5{
wrap = |
required = 1
field = header
}
}
}
Ich denke ich brauche das nicht weiter erklären. Das Script holt sich entweder die eine oder die andere Schriftart. Nicht lachen, ich bin Anfänger ;-)
Mein Menü wird danach wie folgt erstellt:
## HAUPTNAVIGATION
page.10.subparts.NAVIGATION_OBEN = HMENU
page.10.subparts.NAVIGATION_OBEN {
special = directory
special.value = 2
1 = GMENU
1.wrap = <ul>|</ul>
1.NO = 1
1.NO {
XY = [10.w]+10,55
align = left
wrap = <li class="menu">|</li>
#Beschriftung als Text rendern
10 = TEXT
10 {
text.field = title
fontColor = #2d0f00
fontSize = 64
antiAlias = 1
align = left
spacing = 5
offset = 0,54
}
10.fontfile < temp.random
}
1.RO < .1.NO
1.RO = 1
1.RO.10.fontColor = #000
1.CUR < .1.NO
1.CUR = 1
1.CUR.10.fontColor = #872e00
}
Leider funktioniert es nicht. Ich denke ich mache hier einen grundsätzlichen Denkfehler, leider komme ich nicht drauf. Würde mich freuen wenn sich jemand erbarmt. : )
Vielen Dank!
Es muß auf jeden Fall schon mal fontFile heißen, nicht fontfile...
Hallo,
vielen Dank, darans lags allerdings nicht. Vielleicht sollte ich noch erwähnen dass wenn ich "temp.random.data" ausgehen, er mir das korrekte Ergebnis zeigt. Ich kann es auch per copy/paste fest hinter fontFile in Script schreiben. Nur der automatische Weg geht eben leider nicht.
Viele Grüße
Funktioniert denn dies Ausgabe richtig ohne dieses ganze Rand-Gedöhns?
Da fast jeder Schrift trotz gleicher PX unterschriedlich groß ist, wird das so oder so sicher ein schwieriges Unterfangen und abgesehen von Spieltrieb völlig sinnfrei (nur meine Meinung und nicht böse gemeint).
Gruß
Michael
Ein unlösbares Problem nach dem Anderen 😉
Dafür würde ich dann im Datensatz, in einem noch nicht definierten Feld, die Schriftgrösse noch mitgeben.
Mich macht das echt Irre, aber ich bekomms einfach nicht zu laufen.
Hallo,
ich glaube die Zuweisung "fontFile < temp.random" geht nicht so einfach.
"temp.random" ist erstmal "TEXT" und nicht das Ergebnis des Ganzen. Oder anders: "fontFile" müsste auch eine "data"-Anweisung besitzen - "fontFile" müsste auch irgendwie ein contentType sein wie TEXT, COA, IMAGE usw.
TypoScript ist leider nicht ganz wie eine Programmiersprache zu verstehen - eher wie eine Beschreibungssprache oder Zuweisungssprache.
Wenn man etwas mit "<" zuweist, dann ist das so zu sehen, als ob man alles, was man vorher definiert hatte auch direkt "reinschreiben" könnte. In diesem Sinne gibt es keine Variablen. Evtl. könnten man was mit Konstanten mache (Eine Konstante definieren "foo = bar" - diese könnte man irgendwo zuweisen "fontFile = {$foo})?
Beispiel Zuweisung:
foo = TEXT
foo.value = bar
page.10.marks.FOO < foo
# Ist das gleiche wie
page.10.marks.FOO = TEXT
page.10.marks.FOO.value = bar
(Es ist nicht das Selbe... bei ersterem wird die Methode "TEXT" zweimal aufgerufen - bei zweiterem nur einmal.)
Ich bin auf eine Lösung gespannt.
LG sunixzs
Schade das keiner eine Lösung hat, eventuell ist es auch keine Anfängerfrage und muss verschoben werden?
Ich bin leider noch nicht weiter gekommen mit dem Problem.
Ein anderer Ansatz: Du verfrachtest das Ganze in eine Extension.
Per Extension "Kickstarter" eine eigene Extension mit Frontend-Plugin erstellen.
In der Extension im Setup das TS definieren (in etwa):
plugin.tx_key_pi1.menu = HMENU
plugin.tx_key_pi1.menu {
special = directory
special.value = 2
1 = GMENU
1.wrap = <ul>|</ul>
1.NO = 1
1.NO {
XY = [10.w]+10,55
align = left
wrap = <li class="menu">|</li>
#Beschriftung als Text rendern
10 = TEXT
10 {
text.field = title
fontColor = #2d0f00
fontSize = 64
antiAlias = 1
align = left
spacing = 5
offset = 0,54
}
10.fontfile < temp.random
}
1.RO < .1.NO
1.RO = 1
1.RO.10.fontColor = #000
1.CUR < .1.NO
1.CUR = 1
1.CUR.10.fontColor = #872e00
}
Dann in der Extensionklasse die Konfiguration holen, den Random-Wert holen und im Konfigurationsarray setzen. Das Ganze dann rendern lassen durch das cObj und ausgeben:
$randomFont = irgendwieRandomFontBekommen();
$menuConfig = $this->conf['menu'];
$menuConfig['1.']['no.']['10.']['fontFile'] = $randomFont;
return $this->cObj->HMENU($menuConfig);
Anschließen das Plugin im Marker ausgeben:
page.10.marks.MEINE_NAVI < plugin.tx_key_pi1
Edith sagt: In den Scriptfeldern sind einige Fehler drin. Es soll auch nur das Prinzip verdeutlichen.