preload
Aug 14

Möchte man dynamisch eine Tabellenzeile per Javascript ausblenden, erreicht man dies durch die Zuweisung wie in folgendem Beispiel zum Verstecken der zweiten Zeile:

var oTR = document.getElementById(‚TableID‘).rows[1];
oTR.style.display = ’none‘;

Möchte man die Zeile nun wieder anzeigen, erwartet ein korrekter Browser eigentlich das Setzen der Display-Eigenschaft auf „table-row“, also:

oTR.style.display = ‚table-row‘;

Dies interpretiert der Internet Explorer allerdings nicht korrekt, er erwartet ein „display = ‚block'“, was wiederum in W3C-kompatiblen Browsern versagt. Die Lösung liegt in der Zuweisung eines Leerstrings an die Eigenschaft, also

oTR.style.display = “;

Dies wird von (allen?) Browsern richtig verstanden.

Aug 07

Es ist schon mehrfach aufgetreten, dass Seiten, die mittels exec() Programme ausführen, urplötzlich hängen. Eine genauere Analyse ergab, dass dieses Problem auftritt, wenn der Server den ersten Request noch nicht abgearbeitet hat, jedoch der Benutzer im Browser schon wieder auf einen Link geklickt hat. Ruft der zweite Request auch exec() auf, hängt der Server. Es handelt sich dabei weder um ein Problem des Servers (bspw. Apache, IIS, Tomcat, usw.) noch um ein Problem des mit exec() ausgeführten Programms (bspw. GhostScript, ImageMagick, sonstige.com, usw.exe).

Das Problem liegt in diesem Fall bei PHP. Da die Session noch in Verwendung ist, während der nächste Request bereits versucht, einen zweiten Prozess mit der selben Session zu öffnen, hängt der Server, falls das ganze während der Ausführung von exec() stattfindet. Die Lösung dieses Problems ist es, die Session vor dem Aufruf von exec() zu schließen und sie direkt im Anschluss wieder zu starten:

<?php
  ...
  session_write_close();
  exec($sCommand);
  session_start();
  ...
?>

Durch das Schließen der Session kommt es nicht mehr zum Hängen des Servers. Das erneute Öffnen nach dem Aufruf von exec() garantiert, dass alle vor Beendigung des Skriptes erfolgenden Session-Zugriffe korrekt ablaufen.

Links zu diesem Problem:

Aug 05

Ein Datum kann, abhängig von der Maske, in der es angegeben werden muss, richtig sein, also bspw. 11.11.1998 oder 2004-04-05. Ein korrekt formatiertes Datum muss aber nicht zwangsweise auch existieren, wie bspw. 2009-02-31, also der 31. Februar 2009. Hierfür kann die PHP-Funktion checkdate($iMonth, $iDay, $iYear) verwendet werden, die ein gregorianisches Datum auf Gültigkeit prüft. Bevor die Funktion aufgerufen werden kann, muss die Datums-Zeichenkette in ihre einzelnen Teile zerlegt werden, also bspw. wie folgt:

<?php
  $iYear = intval(...);
  $iMonth = intval(...);
  $iDay = intval(...);
?>

Nun lässt sich mit checkdate einfach prüfen, ob das Datum wirklich gültig ist:

<?php
  $bDateIsValid = checkdate($iMonth, $iDay, $iYear);
?>

Zu beachten ist, dass checkdate laut Definition Integerwerte erwartet.

Jul 08

Häufig werden für Buttons, die einen Hintergrund haben (also ein Bild) und sich beim MouseOver ändern sollen, img-Tags verwendet. Um Beim Klick eine Aktion auszuführen wird das onclick-Ereignis ergänzt. Der Text des Buttons steht dabei in den Bildern. Doch das geht auch anders…

Weiterlesen

Jul 07

Ein Link, bei dem im onclick-Event ein Javascript-Aufruf erfolgt, soll beim Klick üblicherweise keine andere Seite aufgerufen werden. Das sieht bspw. wie folgt aus:

<a href="javascript:void(0);" onclick="alert('Hallo');">Hallo</a>

Damit der IE6 nicht einfach die aktuelle Seite nochmals aufruft, was in vielen Browsern das Standardvorgehen bei leerem href-Attribut ist (href=""), muss im onclick-Attribut false zurückgegeben werden. Die Version, die in allen Browsern funktioniert, lautet also:

<a href="javascript:void(0);" onclick="alert('Hallo');return false;">Hallo</a>

Die schönste Möglichkeit ist es, die Anweisung in das href-Attribut zu stecken und auf das onclick-Event zu verzichten. Der Trick liegt darin, trotzdem immer void(0); am Ende des Aufrufs anzufügen, also bspw. wie folgt:

<a href="javascript:alert('Hallo');void(0);">Hallo</a>

Jul 06

Der direkte Zugriff auf document.getElementById("elementID").value funktioniert in älteren Versionen des Internet Explorers nicht. Doch das ist keineswegs der einzige Fallstrick. In einem Fall half nichts – der IE wollte und wollte nicht auf das value-Attribut zugreifen – weder direkt noch über die Kombination von options- und selectedIndex-Attribut. Die Lösung – wie so oft – ist genauso simpel wie unschön, jedoch keineswegs naheliegend:

Ist im head-Teil des HTML-Dokumentes – unabhängig vom Dokument-Typ – ein Meta-Tag für das Land definiert, also bspw. <meta name="country" content="DE" />, so funktioniert im IE der Zugriff auf das value-Attribut von select-Elementen schlicht nicht mehr. Nach dem Weglassen dieses Meta-Tags funktioniert wieder alles bestens und zwar auf beide Arten:

var obj = document.getElementById("elementID");
var val = obj.value;

und

var obj = document.getElementById("elementID");
var val = obj.options[obj.selectedIndex].value

Jun 19

Die neue Web2Print-Lösung der UST GmbH wurde bei der WALTER Medien GmbH installiert. Mit diesem System, das für den Enduser ohne PlugIns wie Flash, etc. auskommt, können Werbedrucke auf Kalendern online gestaltet werden. Dazu stehen im Hintergrund vielfältige Vorlagen zur Verfügung, die dann individuell gefüllt werden. Die Anzeige des Ergebnisses wird durch Ajax-Requests aktualisiert, wobei die Umwandlung auf dem Server durch die PDFLib erfolgt und somit schon in der Voransicht immer eine 100%-ig korrekte Darstellung zum Druckergebniss verfügbar ist. Nach dem Absenden der Bestellung wandert das Druck-PDF direkt in den Workflow der Druckerei.

Das System ist unter kalender.walter.de zu finden.

Mai 27

Gerade wenn eine Website neu ins Netz kommt, taucht immer wieder die Frage „Auf welcher Position steht meine Seite bei Google gerade?“ auf. Solange sie unter den begehrten ersten zehn Plätzen zu finden ist, ist das natürlich kein Hexenwerk, aber bei nicht so guten Ergebnissen wird die händische Ermittlung schon aufwändiger. Aber das kann schließlich genauso gut ein kleines PHP-Skript übernehmen. Dazu dient die kleine Klasse, die in diesem Skript zu finden ist.

Mai 22

Grid-Design

Design   von Thomas Sommerfeld Kommentieren »

Im Printbereich wird schon seit langer Zeit ein Rasterlayout verwendet, Zeitungen haben eine klare Unterteilung in Spalten und horizontale Blöcke. Im Webbereich wird zunehmend auch ein solches Basislayout eingesetzt. Die „normale“ Unterteilung in Kopfbereich, 1 – 3 Spalten im Mittelteil und einen Fußbereich ist ja schon absoluter Standard. Immer mehr werden in diesen Bereichen auch noch einzelne Blöcke platziert, was dann eben zu einem Grid-Layout führt.

Weiterlesen

Mai 18

Wir alle freuen uns ja regelmäßig an den liebgewonnenen Eigenheiten der verschiedenen Browser. Damit die Auftraggeber mal sehen, wofür die viele Zeit immer wieder benötigt wird, gibt diese Grafik einen schönen Überblick. Vielen Dank an Alan Foreman für diese klare Auszeichnung.

Time breakdown of modern web design