Javascript Event Handler

30. Januar 2008

Die Ausgangslage: Mit JavaScript aktuell in den Content geschriebene Bilder, über denen bei Mouseover ein Tooltip angezeigt werden sollte.

Das Problem: Erzeuge ich ein Element mit document.createElement, kann ich diesem zwar mit onmouseover eine Funktion zuweisen, kann dieser Funktion aber keine Parameter mitgeben (man kann theoretisch schon, ist aber nicht zu empfehlen).

Die Lösung:

– im IE gibts ein globales Objekt “event”
– im Firefox wird einer funktion automatisch der event e mitgegeben.
– die unterscheidung macht man zum Beispiel über if(document.all)

  1. if(document.all) //IE
  2. {
  3. e=event;
  4. }
  5. else //FF
  6. {
  7. ;
  8. }

– wenn man der funktion keine weiteren Parameter mitgeben kann, kann man die ID des auslösenden Elements abfragen
– im IE über e.srcElement.id
– im FF über e.target.id

  1. if(document.all) //IE
  2. {
  3. e=event;
  4. bild_id = e.srcElement.id;
  5. }
  6. else //FF
  7. {
  8. bild_id = e.target.id;
  9. }

Ausprogrammiert und noch etwas genauer erklärt gibt’s das hier.

Flash und PHP

29. Januar 2008

Weil ich ganz sicher weiß, dass ich das sowieso mal wieder brauchen werde, hier mal die kleine aber feine Anleitung, wie man Flash (in diesem Fall Flash 8 ) und PHP dazu bringt, zusammenzuarbeiten. Genauer gesagt: wie man ein in Flash erstelltes Formular via PHP überprüft und noch ggf. eine e-Mail schickt.

Schritt 1: Das Flash Formular erstellen.

Man erstelle im Flash die Textfelder, die man haben möchte, mit dem Text type Input Text. Wenn die Eingabefelder fertig sind, erstelle man noch einen senden-Button.

Schritt 2: Flash sagen, was es beim senden zu tun hat

Auf den senden button setze man eine Aktion, die ihm sagt, was er zu tun hat:

 

  1. var lvs = new LoadVars();
  2. lvs.email = a_email.text;
  3. lvs.blah = a_blah.text;
  4. lvs.onLoad = function(geladen) {
  5. result.htmlText = this.res;
  6. }
  7. lvs.sendAndLoad("dosomething.php?cache="+(new Date().getTime()), lvs, "POST");

result ist in dem Fall ein weiteres HTML Textfeld, in dem dann am Schluss so ein wunderbarer Ergebnistext wie “Die Daten wurden gesendet, jetzt mach dich vom Acker” ausgegeben wird. a_blah und a_email heißen logischerweise die Eingabefelder. Die werden jetzt ausgelesen und über lvs.sendAndLoad an die PHP Datei dosomething.php weitergegeben (und zwar mit method = POST wie man sieht).

Schritt 3: Zurücklehnen, genießen, PHP code schreiben

Was man nun auch immer mit den aus Flash gewonnenen Daten vorhat, jetzt kommt der einfache Teil. Man erstellt die dosomething.php Datei und ruft die variablen einfach über $_POST auf. Und kann damit machen, was immer man möchte. Mails schicken, sie in die Datenbank schreiben, was auch immer. Und am Ende macht man ein schickes

  1. die("&res=Die Daten wurden gesendet, jetzt mach dich vom Acker!&");

falls man das Bedürfnis hat, Flash noch irgendwas mitzuteilen. Zum Beispiel obs überhaupt funktioniert hat.

Flash und z-index

29. Januar 2008

Bekanntermaßen kann man via z-index zwei Elemente überlagern. Ich versuchte kürzlich, das “skip intro” über eine Flash Animation zu legen, und zwar mit position:absolute und dem z-index. Und habe mich gewundert, warum es nicht funktionierte. Nun, die Erkenntnis ist nicht neu für mich: Flash ist böse.

Dabei wäre die Lösung so einfach (wenn man mal draufkommt). Damit auch Flash das mit dem z-index mitmacht, muss man einfach folgendes tag hinzufügen:

  1. <param name="wmode" value="transparent">

Damit ist das Problem gelöst und ich kann wieder ruhig schlafen.

Ein Anfang

29. Januar 2008

Nun, dann will ich gleich mal mit einem Problem anfangen, das WordPress mir bei der Installation bereitet hat. Bei mir kam nämlich die lustige Fehlermeldung

WordPress 2.3.2 benötigt Mysql 4.0.0 oder höher.

Wie ich festgestellt habe, kommt es auch gut ohne klar, jedenfalls bei der Installation. Um also nicht sinnlos eine alte Version holen zu müssen, empfehle ich den etwas erfahreneren Usern folgendes:

In der Datei wp-admin/includes/upgrade.php kann man in Zeile 12 einfach die entsprechende Funktion

wp_check_mysql_version();

auskommentieren. Das war alles, was ich geändert hab. Und dann klappt’s auch mit der Installation.

Anschließend trat im Admin Interface als erstes das Problem auf, dass geschriebene Beiträge unter Verwalten -> Beiträge nicht sichtbar waren. Hier zeigte sich dann, warum bei der Installation eine bestimmte MySQL Version verlangt wurde. Beim Abfragen der Posts wird nämlich SQL_CALC_FOUND_ROWS benutzt, welches die älteren MySQL Versionen offenbar nicht kennen. Nun, inwieweit sich das später bei mehr Beiträgen noch auswirken wird, werde ich noch sehen, aber bisher konnte ich dem Problem Herr werden, indem ich in der Datei wp-includes/query.php in Zeile 1257 das SQL_CALC_FOUND_ROWS rausgenommen habe, konkret:

  1. $found_rows = "";

statt

  1. $found_rows = 'SQL_CALC_FOUND_ROWS';

Mal sehen, welche Probleme noch so auftreten.