html5w3c Da ich selber bei der Berichtigung des Joomla-Moduls „eventlistcalqajax“ nach W3C-Standards fast durchgerastet bin, hier eine Anleitung, wie man die mit „abbr“ in Verbindung stehenden W3C-Fehler dieses Moduls beheben kann. Ein Fehler der einfach ärgerlich ist, da die beanstandete Funktion auch einfach nicht benötigt wird.

Bei der Überprüfung einer meiner Websieten auf die Validation mittels des W3C-Validators stieß ich auf insgesamt sieben Fehler innerhalb des Kalendermoduls „eventlistcalqajax“ (Link zum Hersteller):

abbr1

Die Nennung von „daynames“ brachte mich auf die Fährte, dass es sich um einen Fehler in der Zeile des Kalenders handelte, die die Tagesnamen enthält. Deshalb auch sieben Fehler – einen für jeden Wochentag. Das vorsorgliche Abschalten dieser Zeile im Backend bestätigte diese Vermutung, da die Fehler verschwanden. Da ich die Zeile aber zugunsten der Nutzerfreundlichkeit gerne behalten möchte, muss eine Lösung her.

abbr2

Die Zeile des Kalenders, die die Wochentage enthält, wird je nach Einstellungen des Moduls dynamisch für das Frontend generiert. Befüllt wird diese Zeile über die unter „/modules/mod_eventlistcalqajax/tmpl/ hinterlegten Datei „default.php“.

Bisher hatte ich mich niemals mit dem PHP-Element „abbreviation“ beschäftigt, weshalb ich zunächst mal garnicht wusste, was es damit überhaupt auf sich hat. 
Kurz gesagt, das Element unterscheidet zwischen zwei Anzeigearten ein und desselben Begriffs; einmal in Abkürzungsform, dann in Langform. Je nachdem welche Funktionen man in die Ausgabe seines Codes einbaut, kann man den Langtext zum Beispiel beim Mouseover über der Abkürzung als Tooltip ausgeben lassen. Sicherlich gibt es aber noch mehr sinnvolle Möglichkeiten die Abbreviation als Element zu benutzen.

In der oben genannten Datei finden sich die foilgenden, rot markierten Stellen, an denen die abbr-Elemente den Zeileninhalt generieren.

if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
#if day_name_length is >3, the full name of the day will be printed
if ($day_name_length >3){
foreach($day_names_long as $d)
$calendar .= '<th class="mod_eventlistcalqajax_daynames" abbr="'.$d.' ">&nbsp;'.$d.'&nbsp;</th>';
$calendar .= "</tr>\n<tr>";
}
else
{
foreach($day_names_short as $d)
if (function_exists('mb_substr'))
{
$calendar .= '<th class="mod_eventlistcalqajax_daynames" abbr="'.$d.'">&nbsp;'.mb_substr($d,0,$day_name_length,'UTF-8').'&nbsp;</th>';
}
else
{
$calendar .= '<th class="mod_eventlistcalqajax_daynames" abbr="'.$d.'">&nbsp;'.substr($d,0,$day_name_length).'&nbsp;</th>';
}
$calendar .= "</tr>\n<tr>";
}
}

Je nach im Backend eingestellter Länge der Anzeige von Wochentagen kann es nun dazu kommen, dass Abkürzung und Langtext gleich sind. Der W3C-Validator merkt dies und bewertet den Code als aufgebläht. Die Nutzung des abbr-Elements ist somit obsolet. Und wird auch in meinen Augen an dieser Stelle einfach nicht benötigt.

Um die Fehler zu entfernen, benutzen wir statt dem „abbr“-Element einfach das unten grün eingefärbte  „title“-Element:

if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
#if day_name_length is >3, the full name of the day will be printed
if ($day_name_length >3){
foreach($day_names_long as $d)
$calendar .= '<th class="mod_eventlistcalqajax_daynames" title="'.$d.' ">&nbsp;'.$d.'&nbsp;</th>';
$calendar .= "</tr>\n<tr>";
}
else
{
foreach($day_names_short as $d)
if (function_exists('mb_substr'))
{
$calendar .= '<th class="mod_eventlistcalqajax_daynames" title="'.$d.'">&nbsp;'.mb_substr($d,0,$day_name_length,'UTF-8').'&nbsp;</th>';
}
else
{
$calendar .= '<th class="mod_eventlistcalqajax_daynames" title="'.$d.'">&nbsp;'.substr($d,0,$day_name_length).'&nbsp;</th>';
}
$calendar .= "</tr>\n<tr>";
}
}

 

Der W3C-Validator ist nun glücklich. Und ich auch.