Typo3-Menüs mit accesskey und title

Um ein wenig “barrierefreier” zu werden, sollte man die Links im Menü mit accesskey- und title-Attributen versehen. Für ersteres habe ich mal die Extension cron_accessiblemenus verwendet, die zusätzlich auch noch dfn-Tags einfügt, die die Gliederung beinhalten. Sehr schön soweit. Aber zusätzlich hätte ich gerne noch den Accesskey im title-Attribut angegeben. Und hier wird’s interessant 😉

Folgenden Code habe ich in die Datei “typo3conf/ext/cron_accessiblemenus/class.user_cronaccessiblemenus.php” ab Zeile 83 eingefügt:

$pagetitle = $menuArr['parts']['title']; if (preg_match('/title="?([^"]*)"?/', $menuArr['parts']['ATag_begin'], $title_matches)) { $title_val = $title_matches[1]; if ($pagetitle != $title_val) { $pagetitle .= ": " . $title_val; $menuArr['parts']['ATag_begin'] = preg_replace('/title="?([^"]*)"?/', 'title="' . $pagetitle . '"', $menuArr['parts']['ATag_begin']); } }

Diese Zeilen sorgen dafür, dass das title-Attribut aus dem Seitentitel und einem evtl. vorhandenen Eintrag im title-Attribut zusammengesetzt wird. Da aber ja noch der Accesskey hinten dran soll, müssen noch folgende Befehle ab Zeile 110 (inkl. neuem Code) eingetragen werden:

if ($key != '' && $hasKey) { $menuArr['parts']['ATag_begin'] = preg_replace('/title="?([^"]*)"?/', 'title="\1' . ' (ALT-' . strtoupper($key) . ')"', $menuArr['parts']['ATag_begin']); }

Damit die Funktion überhaupt angewendet wird, ist folgendes im TypoScript einzutragen:

Als Property von TMENU:
IProcFunc = user_cronaccessiblemenus->makeAccessible IProcFunc { accessKeys = 1 dfn = 1 forbiddenKeys = 0,D,B,A,F,X }

Als Property von TMENUITEM:
ATagTitle.field = subtitle // title

ADD: Gerade gelesen, dass accesskey-Attribute doch lieber nicht vergeben werden sollten… alles umsonst gemacht 😉

AWStats und Typo3

AWStats Installation

AWStats in Typo3 integrieren

  • Download des Moduls von http://typo3lab.colorcube.de/AWStats_logfi.70.0.html
  • Anlegen des Logfile-Verzeichnisses (z.B. “logs” auf Ebene von “fileadmin”) und Schreibzugriff gewähren
  • Anlegen des Logfiles (z.B. “stefan-macke.log”) und Schreibzugriff gewähren
  • Das erstelle Verzeichnis in die “localconf.php” einbinden $TYPO3_CONF_VARS["FE"]["logfile_dir"] = 'logs/';
  • Template-Setup page.config { stat = 1 stat_apache = 1 stat_apache_logfile = stefan-macke.log stat_mysql = 1 }
  • Verzeichnis “awstats” aus dem Archiv nach “typo3/mod/tools/” kopieren
  • Zu “typo3conf/extTables.php” folgendes hinzufügen: $TBE_MODULES["tools"] .= ",awstats";
  • Evtl. in der “localconf.php” noch das obige Script als $typo_db_extTableDef_script = 'extTables.php'; eintragen
  • “typo3/mod/tools/awstats/awstats.pl” ausführbar machen
  • Im Backend unter “Tools” das Modul “AWStats” aufrufen und loslegen!

simulateStaticDocuments

Damit Typo3 die internen Links korrekt für mod_rewrite generiert, waren folgende Parameter im Setup-Bereich des Templates als Attribute des page-Objekts zu setzen:

  • config.simulateStaticDocuments = 1 – Aktiviert die Simulation statischer Dokumente.
  • config.simulateStaticDocuments_noTypeIfNoTitle = 1 – Verhindert, dass der pageType im Linknamen angezeigt wird, wenn dieser 0 ist.
  • config.baseURL = 1 – Fügt einen base-Tag ein, der die korrekte Funktion interner Links gewährleistet.

CODE-Blöcke formatieren

Um die CODE-Blöcke in meinen Posts vernünftig zu formatieren habe ich folgendes getan.

  • In /blogs/rsc/basic.css das Attribut white-space von code auf pre gesetzt. Ab Version 1.6 ist die Datei /blogs/rsc/css/basic.css.
  • In /plugins/renderers/_auto_p.renderer.php ab Zeile 62 eine Schleife eingefügt, die zusätzlich zum PRE-Tag auch den CODE-Tag aus dem “Auto P”-Renderer ausschließt.
  • Dann noch die abschließende Formatierung in der Datei /blogs/skins/custom/custom.css: CODE { display: block; margin: 1em 0 1em 0; border: 1px dashed #aaa; padding: 0.2em; background-color: #eee; overflow: auto; width: 100%; }

Datumsunterschied Excel/VBA

Lustiges Excel-Phänomen, das mir heute aufgefallen ist:

Excel meint, es gibt einen 29.02.1900, interpretiert 1900 also als Schaltjahr, was eindeutig falsch ist. Das wissen wir aus einer früheren IHK-Prüfung: Der Algorithmus zur Bestimmung eines Schaltjahres ist doch der folgende.

wenn Jahreszahl mod 400 = 0 -> Schaltjahr sonst wenn Jahreszahl mod 100 = 0 -> kein Schaltjahr sonst wenn Jahreszahl mod 4 = 0 -> Schaltjahr sonst -> kein Schaltjahr

Soviel dazu 😉

Aber jetzt zum eigentlichen Problem: VBA übernimmt diesen Fehler nämlich nicht und interpretiert Datumsangaben vor dem 01.03.1900 somit fälschlicherweise als einen Tag zu früh. 01.01.1900 wird also zu 31.12.1899. Und das ist ein Problem, da das letztgenannte Datum im internen Kalender gar nicht existiert und nen Fehler verursacht (z.B., wenn man (wie ich) das Datum auf Gültigkeit prüft).

D.h. bei Datumsangaben vor dem 01.03.1900, die VBA aus Excel-Zellen ausliest, muss immer ein Tag addiert werden!

Knowledge Base

Ich habe mir mal ne kleine Knowledge Base eingerichtet… habe lange überlegt, wie ich die am besten umsetze.

In der Firma habe ich dafür ja das MediaWiki eingeführt, das sich bislang auch bewährt hat, aber für meine paar Sachen ist das zu komplex.

Also ab jetzt werde ich da ab und an mal ein paar Sachen posten, die ich hauptsächlich für mich selbst aufschreibe, was ja quasi auch der Sinn einer privaten Knowledge Base ist 😉

IHK-Prüfung… bestanden!?

Sooo… das lange Lernen (naja ;)) hat ein Ende!

Die verdammte Doku ist eingereicht und die Prüfung geschrieben.

Mein Resümee zur Prüfung:

  • GH1: mhh… kann ich schlecht einschätzen. 3x Algorithmen in Struktogramm oder Pseudocode umsetzen. Fand die Algos an sich recht einfach, das kann irgendwie nicht sein 😉 Dann eine schöne UML-Aufgabe mit Use-Case- und Klassendiagramm, die sollte geklappt haben. Zuletzt noch ne umfangreiche SQL-Aufgabe, aber die Abfragen waren recht einfach, wie ich meine. Also ich habe bei 2/5 Aufgaben ein gutes Gefühl, bei den anderen so lala… Gestrichen habe ich die erste Aufgabe: Netzplan zeichnen. Das hätte mir zu lange gedauert!
  • GH2: HAHAHA! Was war das denn bitte!? Ein paar Zinsrechnungen!? Ich dachte, dass kann nicht wahr sein. Habe jede Aufgabe 5x nachgerechnet, weil ich dachte, dass ich noch was übersehen habe. Jetzt habe ich schon andere Meinungen dazu gelesen und muss feststellen, dass es wirklich so einfach war :DD Und dann noch ein kleines Datenbankmodell zur Krönung und ein bisserl Daten zu WLAN und Bluetooth aus dem Handbuch abschreiben! Ich nenn’s mal ein Geschenk 😉
  • Zuletzt noch die WiSo-Prüfung. Dazu fällt mir nichts ein! Wenn man (so wie ich) die Prüfungen der letzten Jahre durchgeschaut hat, konnte man locker 90% ohne Nachdenken abhaken. Eine nette Neuerung war das Auslesen des Krankenkassenbeitrags aus einer Tabelle (dank des neuen 0,9%-Zuschlags). War aber auch kein Thema.

Insgesamt sehe ich der mündlichen Prüfung nun positiv entgegen und werde jetzt erstmal (verdient!?) entspannen 😉 Bin dann mal auf Khaz’Goroth

Projekt – FERTIG!

Yippieh!

Die ersten Produktivläufe waren soeben erfolgreich! Damit kann ich mein Projekt als abgeschlossen bezeichnen! Zumindest was das lauffähige Programm angeht. Jetzt kommt ja noch der blöde Pflichtteil: Dokumentation… grrr…

Die Entwicklerdoku für die PHP-Scripte habe ich mit PEAR:PHPDocumentor innerhalb von 5 Minuten erstellt, aber die dämliche Projektdoku mit Zeitplan etc. wird noch ein ätzender Brocken! Am Samstag habe ich dann ja auch noch die Probeprüfung in der FH 🙁 Da ich keine Zeit gehabt habe zu lernen wird das wohl eher nur ne Spaßprüfung 😉 Aber gut zu wissen, was so drankommen kann und überhaupt erstmal zu sehen, wie so ein Teil aufgebaut ist etc.

Zu gegebener Zeit (spätestens nach dem Abschluss des Projekts und dessen Beurteilung im Januar) werde ich dann mal ne “Projektseite” einrichten, wo sich jeder die Unterlagen etc. downloaden kann. So als Hilfe für andere angehende Fachinformatiker – Anwendungsentwicklung (quasi wie Daniel Rüd). Aber bis dahin ist jetzt erstmal noch Einiges zu tun! Also ab nach Hause und ran an die Doku 😉