mySQL und die Zeit

Oft wurstelt man bei der Entwicklung mit UNIX-Timestamps für Zeitangaben herum. Das ist kein Hexenwerk, aber direkt das Gelbe vom Ei ist es auch nicht. Speziell zur Implementierung von Zeit- und Datums-Filtern benötigt dieser Lösungsansatz eine Menge Logik, die in PHP gegossen werden muss (Schaltjahre, Schaltsekunden, …). Das Herumrechnen damit ist mühsam und sorgt oft für Knöten im Hirn.

Dies kann man wesentlich einfacher haben. mySQL kommt mit einer großen Vielfalt von Datums- und Zeitfunktionen daher, derer man sich wunderbar bedienen kann. Wenn man sich zum Beispiel die Funktion

TIMESTAMPADD()

ansieht, wird man schnell merken, dass diese Funktionen das Entwicklerleben erheblich vereinfachen können. Musste man früher mühsam herumrechnen, um bspw. ein Jahr zu einem gegebenen Datum hinzuzuaddieren, funktioniert das mit

SELECT TIMESTAMPADD(YEAR,1,'2012-01-03')

völlig problemlos – und das Beste: Schaltjahre, -Sekunden und dergleichen sind schon drin. Ein anderes Beispiel: Oft sollen Daten im Monatsraster dargestellt werden. Mit PHP mühsam, mit mySQL eine etwas ausführlichere WHERE-Klausel:

[...] WHERE `date`>SELECT TIMESTAMPADD(day,1,LAST_DAY(TIMESTAMPADD(month, -1, NOW()))) AND `date`<=LAST_DAY(NOW()) [...]

Dieser Where-Klausel liefert alle Datensätze, die im aktuellen Monat liegen, mit einigen Handgriffen kann man sie so erweitern, dass allein ein übergebener Parameter wie bspw. die Angabe, der wievielte Monat vor dem aktuelle angezeigt werden soll, die Filterung schon komplett macht.

Sollte doch einmal – aus welchen Gründen auch immer – der UNIX-Timestamp nötig sein, kann man sich diesen für ein beliebiges Datum mittels der Funktion

UNIX_TIMESTAMP()

zurückgeben lassen. Will man auch so nette Gimmicks wie bspw.

DATE_FORMAT()

nutzen, ist es sinnvoll, vorher die Systemvariable für die Darstellung von Monats- und Tagnamen über

SET SESSION lc_time_names=de_DE

entsprechend zu definieren. Auf diese Weise kann man sich den Unwägbarkeiten der PHP-Datumsfunktionen einfach und nachhaltig entziehen.

Viele weitere Funktionen und genauere Infos kann man der mySQL-Dokumentation entnehmen.

Store Locator ( locator ) – Finger weg! Warum?

Die Extension Store Locator ( locator ) taucht immer wieder (zumindest im deutschsprachigen Raum) als Empfehlung für Umkreissuchen auf. D.h. wenn es drum geht, Filialen, Händler odgl. in einem gewissen Umkreis zu suchen, ausgehend von einer vom bestimmten User bestimmten Position.

Warum man aber tunlichst die Finger von der Extension lassen sollte, hat mir das vergangene Wochenende gezeigt….

Leichtes Warmwerden

Begonnen hatte das Eintauchen in den Code des Store Locator mit dem Hinweis einer Kundin, dass auf ihrer Website keine Orte mit scharfem S gefunden werden bzw. nur, wenn man dieses als „ss“ eingibt. Der Weg führte mich dann durch den PHP-Code bis zu den Abfragen der Geopositioning-Dienste, die in der Datei pi1/class.tx_locator_model.php zu finden sind. Hier kam dann der Schock:

  1. Coding Guidelines existieren nicht bzw. werden ignoriert
  2. Umgang mit Zeichensätzen ist willkürlich
  3. Konfigurationsvariablen von Extension und TYPO3 werden teils ignoriert bzw. hart überschrieben
  4. Geopositioning-Dienste werden abgefragt, die ihren Dienst (in der API-Version) eingestellt haben
  5. 40 hidden-Fields statt einem DB-Requests
  6. SQL-Queries werden zusammengebaut, die UIDs vermischen und Werte überschreiben
  7. Missachtung der enablecolumns/enableFields
  8. TYPO3-API ist in weiten Teilen anscheinend unbekannt
  9. Vermischung der MVC-Einheiten
  10. Logische Fehler

Weiterlesen»

TYPO3 Migration – Vorbereitungshelfer

Vermutlich jeder kennt es: ein etwas angestaubtes TYPO3 soll auf Vordermann gebracht werden. Sei es, dass „nur“ ein Core-Upgrade erfolgen soll, oder gleich ein ganzer Relaunch samt TYPO3-Core-Upgrade – aber mit Beibehaltung der Inhalte. In der Datenbank zeigen sich hunderte Contentelemente und Seiten; zig Extensions sind installiert, manche nicht (mehr) installiert, aber da; … und dokumentiert ist auch nichts oder nicht viel, warum die TYPO3-Instanz so ist, wie sie jetzt ist.

Welche Extensions sind überhaupt (noch) im Einsatz? Welche Contentelemente werden genutzt? Was muss bei einem Upgrade alles beachtet werden respektive nach dem Upgrade wieder laufen bzw. weiterhin möglich sein?

Im TER stieß ich heute auch eine Extension gefunden, die hierzu ein wenig Überblick verschaffen will:
Useful informations in the reports module

Über Erfahrungen und Kommentare würde ich mich freuen…