Zum Inhalt springen

Zufällige Schriftart im Menü

Erstellt am 15. August 2010 · 7 Antworten · letzte Antwort am 18. August 2010

Tags: Frage

meierz ·

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!

meierz ·

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

Michaelh74 ·

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

meierz ·

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.

sunixzs ·

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

meierz ·

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.

sunixzs ·

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.