IT::fsinn » CakePHP
Heute bin ich glücklich, Euch mal wieder einen etwas technischeren Artikel präsentieren zu können.
Es geht um das Zusammenspiel zwischen dem JavaScript-basierten LightWindow (dient grob gesagt dazu, um ein Fenster im Fenster animiert anzuzeigen und zu steuern – Einsatz z.B. für Großansichten von Bildern) und AJAX-Aufrufen im Allgemeinen.
In meinem Fall habe ich eine CakePHP-Applikation, die auf Anforderung gewissen Seitenteile per AJAX austauscht. Sowohl auf der Startseite, als auch auf dem nachgeladenen Bereich sind Links verbaut, die die jeweils verlinkten Inhalte in einem LightWindow darstellen sollen.
Auf der Startseite funktionierte das beim Testen auch prächtig. Lud ich jedoch einen Seitenteil nach, wurden die LightWindow-Links unschön “ganz normal” im Browser geöffnet, anstatt im LightWindow.
Ursache: Beim Nachladen verliert LightWindow den Bezug zu den vorhandenen DOM-Objekten (z.B. den Links) und kann dann nicht mehr wie gewünscht auf ein onClick-Event reagieren.
Lösung: Nach dem Nachladen muss die jeweilige LightWindow-Instanz re-initialisiert werden.
Bei mir sah das dann so aus:
<script type="text/javascript">
myLightWindow.initialize();
</script>
Dieses Code-Snippet ziert nun den jeweiligen, nachgeladenen Bereich und siehe da: die Links wurden wieder sauber im LightWindow geöffnet.
[1] LightWindow: http://www.stickmanlabs.com/lightwindow/
[2] CakePHP: http://www.cakephp.org/
[3] CakePlanner: http://sourceforge.net/projects/cakeplanner/
Alt bekanntes Thema: beim Aufruf eines HTML-Formulars soll in einer Select-Box ein Text angezeigt werden, der dazu auffordert, doch bitte einen Wert auszuwählen.
Auch in CakePHP ist das natürlich über den Form-Helper möglich. Eher zufällig stieß ich gerade auf das input-Parameter empty, als ich gerade auf der Suche nach einer Lösung für mein Problem war, dass meine Select-Box komplett leer ist – aber das ist ein anderes Thema.
Wollt Ihr also einer Select-Box ein “Bitte auswählen” spendieren, sieht das zusammengefasst so aus:
echo $form->input('category_id', array('type' => 'select', 'empty' => 'Bitte auswählen'));
Mein Abend ist gerettet…das CakeFest kommt nach Deutschland! Yes! Auch, wenn es in Berlin ist.
Wer ist dabei?





