Tab-Menü im eigenen Modul verwenden

TYPO3 nutzt im BackEnd in in der letzten Version Tabs. Ich wollte diese Tabs in einem mit Extbase geschriebenen Modul nutzen. Das ist eigentlich nicht so schwer und funktioniert wunderbar.
Zunächst braucht man das tabmenu-Script, man kann es mit einem Hook ins Template einfügen. Den Extensionnamen habe ich immer durch xxx ersetzt.
ext_localconf.php

/*
 * Hook um eigenes JavaScript im BE hinzuzufügen
 */
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/template.php']['preHeaderRenderHook'][] = 
	t3lib_extMgm::extPath('xxx').'Resources/Private/Backend/Scripts/class.tx_xxx_templatehook.php:tx_xxx_templatehook->addBackendJavaScript';

Dann eine Klasse im Verzeichnis oben anlegen und Script mit einem Hook hinzufügen

class tx_xxx_templatehook {
 
	public function addBackendJavaScript(&$aParams, $oTemplate) {
		// ajax calls
		$oTemplate->getPageRenderer()->addJsFile('js/tabmenu.js');
	}
 
}

Im Template braucht man nur die entsprechenden Container anzulegen:

<div class="typo3-dyntabmenu-tabs">
	<table class="typo3-dyntabmenu" cellspacing="0" cellpadding="0" border="0">
		<tr>
			<td class="tab" id="DTM-xxx-1-MENU" nowrap="nowrap" onmouseover="DTM_mouseOver(this);" 
				onmouseout="DTM_mouseOut(this);">
				<a href="#" onclick="this.blur(); DTM_activate(&quot;DTM-xxx&quot;,&quot;1&quot;, 0); return false;">Tab Name</a>
			</td>
			<td class="tab" id="DTM-xxx-2-MENU" nowrap="nowrap" onmouseover="DTM_mouseOver(this);" 
				onmouseout="DTM_mouseOut(this);">
				<a href="#" onclick="this.blur(); DTM_activate(&quot;DTM-xxx&quot;,&quot;2&quot;, 0); return false;">Tab Name</a>
			</td>
		</tr>
	</table>
</div>
<div class="typo3-dyntabmenu-divs">
	<div style="display: none; padding: 10px;" id="DTM-xxx-1-DIV" class="c-tablayer">
		Tab Inhalt
	</div>
	<div style="display: none; padding: 10px;" id="DTM-xxx-2-DIV" class="c-tablayer">
		Tab Inhalt
	</div>
</div>
 
<!-- Initialization JavaScript for the menu -->
<script type="text/javascript">
	DTM_array["DTM-xxx"] = new Array();
	DTM_array["DTM-xxx"][0] = "DTM-xxx-1";
	DTM_array["DTM-xxx"][1] = "DTM-xxx-2";
	DTM_activate("DTM-xxx", top.DTM_currentTabs["DTM-xxx"]?top.DTM_currentTabs["DTM-xxx"]:1, 0);
</script>

Extbase Fluid Tipps zur Fehlersuche

Ich entwickele nun schon ein wenig länger Extbase und Fluid Extensions bzw. Module. Bei jedem Fehler, der einem unterwegs begeget, lernt man ein wenig dazu und daher wollte ich mal ein paar Tipps geben.

Die Grundlage einer Extension kann man wunderbar mit dem Extension Builder anlegen. Er erstellt alles, was man braucht – Controller, Repositories, Models. Ist zwar nicht immer so, wie ich es brauche, aber schon eine sehr gute Grundlage. Allerdings kann es sein, dass man nicht alle Felder von Anfang an anlegen kann, da man sie nicht alle kennt. Dann fügt man neue Felder hinzu, und plötzlich funktioniert es nicht mehr – Fehler in der Liste oder beim Bearbeiten und Speichern.

Als erstes sollte man prüfen, ob die TCA-Definition korrekt ist. Das geht am besten darüber, dass man über die gewöhnliche Listenansicht im TYPO3-BackEnd sich die Elemente anschaut. Wenn alle Felder angezeigt werden, evtl. Relationen dargestellt werden, dann ist das TCA wohl korrekt.

Ich hatte nach dem Hinzufügen von Feldern einen ziemlich miesen Fehler. Das Formular zum Bearbeiten wurde angezeigt, nach dem Klick auf den Speichern-Button kam allerdings eine Fehlermeldung, die mir nicht unbedingt weitergeholten hat: „The value must be of type „Tx_XXX_Domain_Model_XXX“, but was of type „NULL“. “ Der Exception-Stack ist auch keine große Hilfe. Die Ursache: Ich hatte das Feld bereits im Formular angelegt, hatte es aber noch nicht im Model. d.h. wenn mal so ein Fehler auftaucht, dann prüfen, ob die Felder 1) im TCA drin sind, 2) im Model mit Getter und Setter Methoden komplett definiert sind und 3) im Formular genauso heissen.

Geschrieben in TYPO3 | Kommentare deaktiviert für Extbase Fluid Tipps zur Fehlersuche

Relaunch Webseite Phantasialand

Es ist schon ca. einen Monat her, seit dem das Phantasialand mit einer neuen wunderschönen Seite online gegangen ist. Ich bin schon ein wenig stolz daran mitgearbeitet zu haben. Aus der Marketingsicht wurde der Relaunch und die neue Webseite auf kernpunkt.de ausführlich betrachtet. Aus Entwicklersicht hat die Seite auch einiges zu bieten gehabt, hier einige Highlights:
Die Navigation wurde mit HTML und CSS und ein wenig Hilfe von jQuery umgesetzt. Ist es nicht schön, wie der blaue Schein dazukommt, wenn sie aufgeklappt ist und wie z.B. die Park-Themenwelten beim RollOver in den Bildern hervorgehoben werden – pure CSS Magic.
Für die Sushibar (ich wusste auch nicht, dass man es so nennen kann, für mich ist es ein Carousel), die man z.B. auf der Seite Fantasy bestaunen kann, musste ein jQuery-Plugin entwickelt werden. Vom CSS her war es in der Sushibar eine Herausforderung, dass die Elemente teilweise nach oben rausragen.
Auch sehr schön geworden ist der Parkplan – zu finden auf den Themenwelt-Seiten als Link in der rechten Spalte. Attraktionen der ausgewählten Themenwelt werden im Parkplan hervorgehoben.
Und auch der Erlebnisplaner hat ein paar nette Features: Attraktionen können am Anfang über einen Hinzufügen-Button in der Attraktion in den Erlebnisplaner gelegt werden. Sobald eine Attraktion im Erlebnisplaner ist, macht er auch schon Vorschläge. Diese Vorschläge kann man per Drag & Drop ebenfalls in die Liste der geplanten Attraktionen ziehen. Wenn man fertig ist, wird auf Wunsch eine Anfahrtbeschreibung generiert und ein personalisierter Parkplan, auf dem die gewählten Attraktionen zu sehen sind.

Geschrieben in default | Kommentare deaktiviert für Relaunch Webseite Phantasialand

Sound-Steuerung in Flash AS3

In Flash kann man relativ einfach Musik-Dateien (mp3) laden und abspielen. Ein Anleitung gibt es z.B. bei Republic of Code – Playing sounds with AS3. Nun wollte ich die Datei aber nicht von Anfang an abspielen, sondern ab einem Punkt, den ich mir vorher gemerkt habe. Die Seite, auf der das eingesetzt wird, verwendet Hintergrund-Sound mit ungefähr 2 Minuten langen Loops. Nun dachte ich mir, es sei ein wenig nervig, wenn beim Umherklicken auf der Seite die Hintergrund-Datei immer von vorne anfangen würde zu spielen. Daher wird beim Abspielen der Datei die aktuelle Position des Abspielknopfes gemerkt und beim nächsten Aufruf spielt die Musik von der Stelle weiter. Und daher musste ich die Musik nicht von vorn, sondern von einem bestimmten Zeitpunkt abspielen. Wenn der Loop fertig gespielt worden ist, sollte das Musikstück wieder von vorn beginnen. Nun gab es allerdings zwei Kleinigkeiten, die mir die Lösung nicht besonders einfach gemacht haben.

In der Flash-AS3-Referenz zum Sound-Objekt steht als Beschreibung der Funktion play()

public function play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel

loops:int (default = 0) — Defines the number of times a sound loops back to the startTime value before the sound channel stops playback.

Wenn die Datei also zu Ende abgespielt wurde, dann spring der Abspielknopf nicht an den Anfang, sondern an die Position, mir der das Abspielen begann. D.h. soundClip.play(position, 10000) funktioniert in meinem Fall nicht, weil da der Sound immer nur von position bis Ende abgespielt wurde.

Dann entschloss ich mich auf die Angabe von Loops zu verzichten und stattdessen einen Event Listener zu nehmen, der auf das Event SOUND_COMPLETE hört. Dieser Event Listener wird dem Sound Channel-Objekt zugewiesen. Leider wurde das Event nicht ausgelöst, was der folgende Artikel SOUND_COMPLETE event is not firing beschreibt und löst. Bei jedem Aufruf der Funktion play wird ein neues Sound Channel-Objekt zurück gegeben, so dass der Event Listener gelöscht wird. Damit es also wie gewünscht funktioniert, muss auf jeden Aufruf von play() der Aufruf addEventListener() folgen.

Step Choreo

gemacht am 06.Mai

Block A:
9 – Mambo seit R, Leg Curl R, Fuß auf dem Step absetzen, Straddle
7 – Stomp R, Box over L
8 – Stomp over hinten kreuzen, Double Stomp Tango auf dem Boden
8 – Chacha over, Kick

Block B:
6 – Kick Ball Change over kreuzen
10 – Double Knee, Basic over zurück
8 – 2 March rauf, Tap L, Tap L, Turn 90°, Straddle down
8 – Flieger, Basic Jump Turn
Aufbau: Mambo + Repeater + Basic => aus Repeater wird 2 March und Double Knee => aus Mambo und 2 March wird Kick Ball Change
Für den zweiten Teil Basic und 3 Kneelift => zweiter Kneelift wird Flieger => aus Basic und Kneelift den finalen Schritt. Beim Zusammenbauen den letzten Kneelift durch einen Basic ersetzen.

Block C:
8 – Basic over mit Tap am Ende, mit Kneelift zurück
8 – Mambo Chacha R auf dem Boden, Chacha Straddle L
8 – Repeater Knee
8 – 2 V-Step
Aufbau: 2 Basic + Mambo Chacha + Basic

Geschrieben in choreos | Kommentare deaktiviert für Step Choreo

Tile Container Komponente

Die Tile Komponente ist ein Container, in dem die Elemente automatisch horizontal oder vertikal einsortiert werden. Im Vergleich zu einer HBox oder eine VBox, bei denen keine neue Zeile oder Reihe begonnen wird, wenn die Elemente die vorgegeben Breite bzw. Höhe des Containers überschreiten, sorgt Tile dafür, dass eine neue Zeile begonnen wird. Sehr gut geeignet dafür, wenn man eine variable Menge von Elementen mittels Repeater darstellen möchte. Die Dokumentation zu Tile mit Beispielen der Anordnung gibt es bei Adobe Flex 3 Referenz.

Geschrieben in flash/flex | Kommentare deaktiviert für Tile Container Komponente

Zoran Drvenkar – Du

Bewertung: 8/10

Es werden mehrere Geschichten parallel erzählt, dabei wird der Leser direkt mit Du angesprochen und wird zu der Person, die gerade in diesem Kapitel die Hauptrolle spielt. Mal ist es ein Mann, der gelegentlich ruhig und gelassen mehrere Menschen tötet. Mal sind es Mädchen – Teenager, die versuchen mit einem Haufen Drogen zu verschwinden. Mal ist es „der Logist“ Ragnar, der die Mädchen sucht und die Drogen wiederfinden möchte. Am Anfang ist es recht verwirrend, weil dieser Schreibstil mir bisher nicht untergekommen ist. Ändert sich die Person, in der man gerade drinsteckt, dann ändert sich auch die Sprache ein wenig. Junge Mädchen reden nunmal anders als 40-jährige Herren. Am Anfang dauert es, bis das Buch in Fahrt kommt. Die Personen werden erstmal vorgestellt, banale Dialoge geführt. Die Geschichten entwickeln sich unabhängig voneinander, bis man dann begreift, dass sich die Wege der Personen an einigen Stellen doch kreuzen. Das fiese ist, dass die Erzählreihenfolge nicht gleich der Reihenfolge der Geschehenisse ist. Am Anfang hat man ein Puzzle mit vielen Teilen, während man liest, setzt man diese Teile zusammen und fängt an ein Bild zu erkennen. Das Buch fesselt ohne brutal oder reisserisch zu sein und behält die erreichte Spannung bis zum Schluss bei.

Geschrieben in books | Kommentare deaktiviert für Zoran Drvenkar – Du

Daniel Glattauer – Gut gegen Nordwind

Bewertung: 9/10

Emmi will ein Zeitschriften-Abo kündigen und vertippt sich bei der E-Mail-Adresse, dadurch landet die E-Mail bei Leo Leike. Dieser weist sie auf den Fehler hin und damit wäre die Kommunikation zwischen den beiden beendet gewesen, wenn Emmi nicht eine Weihnachts-Massenmail geschrieben hätte, die Leo dann auch noch bekommt. Ab dann schreiben sich die beiden, ohne sich näher kennen zu wollen. Am Anfang ist es lustig, dann wird die Unterhaltung zwischen den beiden immer mehr zu einem Flirt, dann entstehen (im Weinrausch) romatische Gefühle. Emmi ist jedoch verheiratet und Leo heult gelegentlich seiner vergangenen Beziehung hinterher. Dann wollen sich die beiden treffen (das schon nach einem Drittel des Buches). Wenn sie sich treffen, was passiert dann noch in den restlichen zwei Dritteln? Sie verabreden sich nachmittags in einem Cafe und wollen wissen, ob sie sich erkennen. Danach wird die E-Mail-Konversation fortgesetzt und sie rätseln, wie der andere ausgesehen haben mag. Sie unterhalten sich weiter per E-Mail über private Themen und schließlich sind die beiden verliebt in das Bild, das sie sich von der andern Person erschaffen haben. Ist es bereits fremdgehen, was Emmi da macht? Kann man sich in einen Menschen verlieben, dessen Stimme man nicht mal kennt? Werden sie sich jemals treffen? Es bleibt spannend bis zum Schluss und man durchlebt Höhen und Tiefen mit den beiden bis zu einem Ende, das einen nachdenklich stimmt.

Geschrieben in books | Kommentare deaktiviert für Daniel Glattauer – Gut gegen Nordwind

Step Choreo

gemacht am 29.April

Block A:
8 – Double Stomp Tango auf Step R, Mambo Chacha am Boden R
8 – 2 March auf das Step, L Fuß Nordseite ab, R Knee hoch, R Kneelift zurück
8 – L Single Stomp over hinten kreuzen, Double Stomp Tango mit Drehung auf dem Boden
8 – L Flieger over, R Kick

Block B:
16 – 2 March rauf in die Mitte vom Step, Füße auf Stepbreite nach außen öffen, R Stomp down, mit L vom Step runterdrehen, auf 10 L Stomp, Box Step R zurück
8 – Push, Switch, Box Step
8 – 2 Knee Lift

Push-Switch: Repeater Knee, dann Push, Switch mit March am Boden, dann den Box Step

Block C:
8 – R Leg Curl seit, Kneelift R vorne kreuzen
8 – auf dem Boden Tap Twist, Turn Reverse R
16 – Sixpoint R + L, Double Knee R, Basic L

Geschrieben in choreos | Kommentare deaktiviert für Step Choreo