Monday, March 1, 2010

Drupal Glossar Modul für www.gelenk-doktor.de angepasst

Das Drupal Glossar Modul hat zwei Schwächen.
  • Die Sortierung auf der Glossar Seite ist nicht alphabetisch, sondern redaktionell.
  • Die html Ausgabe ist nicht standardgerecht.
Das Arlmedia Team hat die Probleme bei der Erstellung eines medizinischen Glossars provisorisch zumindest behoben. Der folgenden Bericht liefert eine Fehler-Analyse zum Drupal Glossar Modul mit Code Beispielen.

Drupal Glossar Modul für Medizinisches Wörterbuch auf www.gelenk-doktor.de

Arlmedia für eine orthopädischen Praxis-Klinik eine Webseite zu erstellen. Dabei hat Arlmedia Drupal und auch das Glossar Modul von Drupal verwendet. (http://drupal.org/project/glossary). Das Glossar Modul ermöglicht in erster Linie fachspezifische Begriffe auf der Webseite lexikalisch zu listen und zu erklären. Weiterhin kann das Glossar Modul so eingestellt werden, dass darin enthaltene Begriff beim Auftreten im übrigen Text bereits im Kontext erklärt werden. Sie erscheinen leicht unterstrichen und die Definition erscheint, wenn man mit der Maus darüber fährt. Das ist für nutzerfreundlich, gerade bei fachlich anspruchsvollen Webseiten. Leider ist das Glossar Modul noch in einer frühen Phase seiner Entwicklung. Arlmedia.eu mußte für den professionellen Einsatz einige Steine aus dem Weg räumen.

Problem 1: Das Drupal Glossar Modul sortiert nicht alphabetisch

Der erste Problem war die fehlerhafte Sortierung. Ein Blick in die Bugliste zum Glossar-Modul ( http://drupal.org/project/issues/search/drupal?version[0]=156281&status[0]=1&priorities[0]=1&priorities[1]=2&categories[0]=bug ) zeigt diesen Fehler als bekannt, aber noch ungelöst an. Untersuchung des Quelltext des Drupal Glossar Moduls zeigte die Fehlerquelle. Das Glossar Modul bezieht seine Begriffsliste vom Drupal Taxonomy Modul. Die Sortierung dort folgt aber in erster Linie der einer redaktionellen Gewichtung. Die alphabetische Sortierung ist nachrangig. Da wir auf die Gewichtung des Taxonomy Moduls nicht verzichten wollen, baut das das Arlmedia-Team die alphabetische Sortierung direkt in das Glossar Modul ein. Die Funktion "glossary_overview in glossary.module" ergänzen wir folgendermaßen:

// Hier wird die das Glossar übergeben
$tree = taxonomy_get_tree($vid);
// Jetzt der Code von Arlmedia:
usort($tree, '_glossary_cmp');

// Zusaezlich fügen wir folgende Funktion ein.

function _glossary_cmp($a, $b) {
 return strcasecmp  ($a->name  , $b->name);
}
Diese Lösung hat ein kleines Problem: Wir müssen beim beim Update des Glossar Moduls darauf achten, ob der Fehler inzwischen beseitigt ist. Falls nicht, dann muss diese Lösung bei jedem Modul-Upgrade wieder eingespielt werden.

Problem 2: Das Glossar Modul produziert kein valides HTML

Bei den Abschlußarbeiten zu der medizinischen Webseite www.glenk-doktor.de, überprüft Arlmedia das HTML mit dem W3C HTML Validator. Natürlich wollen wir fehlerfreies HTML und CSS ausliefern. Das Glossar Modul verwendet für Aufzählungen DL, DD und DT Tags. Die Anker für die Seitennavigation werden durch ein
< a name=“anchorname“>< /a>
gesetzt. Diese sind jedoch nicht durch < dd> oder < dt> Tags eingeschlossen. Dieses Verhalten des Glossar Moduls produziert für jeden Buchstaben einen Fehler und entspricht nicht den Vorgaben von korrektem HTML. (Siehe http://www.w3.org/TR/html401/struct/lists.html#h-10.3) Der Workaround ist in diesem Fall leicht gefunden. Wir können die HTML-Ausgabe des Glossar Moduls im Theme manipulieren. Wir fügen ein weiteres Template namens page-glossary.tpl.php und registrieren es. Dazu speichern wir lediglich die Theme Einstellungen nochmal ab. Das Template ist zunächst eine Kopie der page.tpl.php. Den Inhalt, den wir vom Glossar Modul für die Übersicht erhalten, manipulieren wir vor dem Output folgendermaßen:


$contentnew = str_replace(array("

", "
"),"", $contentneu); $contentnew = str_replace("
", "
", $contentneu);
Danach werden die Aufzählungen nicht mehr durch die Linkanker unterbrochen. Wir haben korrektes HTML hergestellt. Da der Fehler in der Drupal Community schon bekannt ist, wird er wahrscheinlich in einem der zukünftigen Versionen des Drupal Glossars beseitigt sein.

No comments: