Javascript Image onload

Beispiel:
Beim Klick auf einen Link soll sich ein Overlay öffnen, in dem ein Bild angezeigt wird.

Das Overlay soll sich öffnen und zunächst eine „Loading“ Animation zeigen, so lange, bis das eigentliche Bild geladen ist und angezeigt werden kann.

Das Javascript:
loadImageObj = new Image();
loadImageObj.onload = function () {
/* nachdem das loading.gif geladen wurde, das Overlay anzeigen */
imageObj = new Image();
imageObj.onload = function () {
/* nachdem das gewünschte Bild geladen wurde,
das loading.gif gegen das gewünschte Bild austauschen */
};
imageObj.src = 'gewuenschtesbild.jpg';
};
loadImageObj.src = 'loader.gif';

Hinweis: Besonders wichtig ist, dass die Bild-Src erst nach der onload() Definition gesetzt wird, da sonst das Bild geladen wird, bevor das onload-Event definiert wurde! Je nach Browser kann dies sonst zu Problemen führen.

Nachtrag: Wenn das loading.gif ein (loop) animiertes Bild ist, führt dies im Internet-Explorer offensichtlich dazu, dass jeweils mit Ende, bzw. Beginn des neuen Loops das onload Event erneut ausgeführt wird, was zu einer Endlosschleife führt, das Overlay kann also nicht mehr geschlossen werden, da es direkt erneut geöffnet wird. In diesem Fall ist es wohl einfacher auf das onload für das loading.gif zu verzichten.

PHP Locale/Zeitzone setzen

Folgende Codes wurde unter PHP 5.2.x getestet.

Setzen der Standard Zeitzone:
date_default_timezone_set('Europe/Berlin');

Ausgeben aller installierten Locales:
ob_start();
system('locale -a');
$str = ob_get_contents();
ob_end_clean();
var_dump(split("\\n", trim($str)));

Setzen einer Locale:
setlocale(LC_ALL, 'de_DE.ISO8859-15', 'de_DE.ISO8859-1', 'de_DE');
setlocale(LC_ALL, 'de_DE.UTF-8');

Ob nun UTF-8 oder UTF8 gesetzt werden muss, scheint abhängig vom eingesetzten Server zu sein.
In meinem Test musste UTF-8 gesetzt werden. Weitere Infos unter: http://de.php.net/de/setlocale

„Schlechtes HTML ist teuer (und weitere Weisheiten)“

Eine – wie ich finde – sehr zutreffende Aussage von Jens Meiset ist folgende:

„HTML lernen und schreiben ist nicht schwer, HTML beherrschen aber erfordert tiefgehende Kenntnisse und Erfahrung, um Irrelevantes auszulassen und Wartungsfallen zu umgehen.“
(Quelle: http://www.meiert.com/de/publications/articles/20090211/)

Damit wird wieder einmal bestätigt, dass es eben doch nicht nur darauf ankommt, HTML lesen und schreiben zu können! Echtes Fachwissen wird von den meisten Kunden leider erst erkannt, nachdem sie mindestens einmal schlechte Erfahrung gamacht haben und „auf’s Maul gefallen sind“. Dabei könnte es so einfach sein …

neues Zend Framework Rewrite

Seit einiger Zeit findet sich im Quickstart Tutorial (englisch) des Zend Frameworks eine neue verbesserte RewriteRule:

Wird das mod_rewrite Modul unter Apache verwendet, wird empfohlen, eine .htaccess Datei mit folgendem Inhalt im Hauptverzeichnis der Domain (DocumentRoot) abzulegen:

# public/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Was passiert hier nun?

Die Umgebungsvariable REQUEST_FILENAME beinhaltet laut Apache-Dokumentation den vollen Pfad zur Datei oder zum Script entsprechend der Anfrage (z.B. /var/www/domain.tld/public/css/style.css).

Die drei Bedingungen (RewriteCond) prüfen nun, ob diese/s Datei/Script eine tatsächlich existierende Datei (s), symbolischer Link (l) oder ein Verzeichnis (d) sind. Wenn ja: leite die Anfrage unverändert durch und beachte keine weiteren Regeln ([L] = Last/Letzte Regel), also kein Rewrite und Ende der Prüfung. Wenn nein: Schreibe die Anfrage zu /index.php um. Das NC bewirkt, dass nicht zwischen Klein- und Großschreibung unterschieden wird (NC = no case-sensitive).

Besonderheit bei Deklaration der Rewrite Bedingungen/Regeln innerhalb eines VirtualHost
Die zuvor aufgezeigten Bedingungen gelten für die Deklaration innerhalb einer .htaccess Datei. Gleichermaßen kann das Rewriting natürlich auch innerhalb einer VirtualHost Definition deklariert werden.

Jedoch ist bei einer Deklaration innerhalb eines VirtualHosts zu beachten, dass die Umgebungsvariable REQUEST_FILENAME hier nicht den vollen, sondern den relativen Pfad vom DomainRoot beinhaltet.

In den Bedingungen muss daher die Umgebungsvariable DOCUMENT_ROOT zusätzlich vorangestellt werden!
Der Rest bleibt erhalten.

# innerhalb VirtualHost Deklaration
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -s [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -l [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]