Sie sind hier:   » ZMS home » Dokumentation » Projektdetails » KPOH

Projektdokumentation Kompetenznetz Pädiatrische Onkologie und Hämatologie - KPOH

Autor: R. Herold, F. Hoffmann, 23.07.2003

Das KPOH-Projekt ist einer der wichtigen Ausgangspunkte von ZMS 2.0. Die bedeutsamsten Merkmale sind die LDAP-Integration, der defaultmässige EPOZ-Editor, ein angepasstes Metaset und diverse, teilweise sehr komplexe Spezielle Objekte (Kalender). Zudem existiert eine ZMS-Aktion zum Erzeugen von DOI-Codes. In der folgenden Dokumentation werden die wichtigsten Eckpunkte der Konfiguration genannt.

www.kinderkrebsinfo.de

Screenshot kinderkrebsinfo.de

LDAP-Authentifizierung

Die User werden über das ZMS-Root-Menü "Zugriff" erreicht; in diesem Menü werden Nutzer und Rollen separat generiert. Auf der Übersichtsseite wird jeder "Nutzer" wird zunächst ohne Rolle initialisiert (Login-Name, Passwort, E-Mail, Hyperlink auf Profildaten). In einem Nutzer-spezifischen Sub-Menü werden beliebig viele Content-Knoten ausgewählt, auf denen der Nutzer unterschiedliche Rechte bzw. Rollen haben kann. Für das Zuweisen der Zugriffs-Knoten ('local roles') sind folgende Eigenschaften obligatorisch zu definieren: Sprache(n), URL des Content-Knotens (über ein Sitemap-Popup) und zugehörige Rolle(n). Per default existieren die bekannten Rollen: Admin, Redakteur, Autor und Abonnent.
(Hinweis: seit der CVS-Version des LDAPUserFolder 2.2+, neuer als 08.08.03, wird dn korrekt übergeben; zudem wurden Sicherheitslücken bei zertifikatsbedingter Authentifizierung bearbeitet.)

ZMS-Zugangsverwaltung mit LDAP-Interface; als Authentisierungs-Name wird derjenige verwendet, der in der Zope-LDAPUserFolder-Konfiguration als 'Login Name Attribute' spezifiziert ist.

Spezifikation der individuellen Rechte; für jeden Konten können Rollen und Sprachen zugewiesen werden.

Konfiguration des LDAPUserFolders für die Kommunikation mit dem LDAP-Service; das Produkt ist unbedingt erforderlich.

Suche

Zur Indexierung von Binärformaten kommt das Zope-Produkt TextIndexNG 2.0 zum Einsatz und erweitert ZCatalog. In die Entwicklung von TextIndexNG 2.0 wurde ausgenommen, das zukünftig die ZMS-Objekte stets mitindexiert werden (so daß Anpassungen bei Update entfallen). Weiterhin wurde eine 'CatalogAware'-Funktion eingeführt, die eine inkrementelle Indexierung für jede Objektmodifikation erlaubt; damit ist der Index stets aktuell.
Das differenzierte Suchinterface besteht aus einem Textabschnitt, der DTML-Code (Download s. Teaser oben rechts) für die Spezifikation der Suche enthält.

Layout

  1. Farbmodifikationen durch das Designdefintion-Metaelement: ein Spezielles Objekt bestehend aus einer Farbdefintion und zwei Image-Elementen liefern die Meta-Deklaration für die Gestaltung der Channels. Das Element wird optional in einen Rubrikknoten eingebunden; die spezifizierten Parameter bestimmen die Farbgebung und Image-Präsentation.
  2. Micronavigation: schliesst ab mit einem 'RedDot' für den Moduswechsel ins Redaktionssystem. Folgender DTML-Code erzeugt den Link: <a title="Edit!" <dtml-if "REQUEST.get('preview','')=='preview'">target="_parent"</dtml-if> href="manage?lang=<dtml-var lang>" style="color:red;text-decoration:none">&nbsp;&middot;&bsp;</a>
  3. Die Channel-Navigation bodyTop-Channels generiert eine Tabelle mit asymmetrischen Zellenweiten, damit sie sich in die Layoutkonstruktion einpasst
  4. Standardmässig erscheint unter einem Rubrik-Objekt eine Inhaltübericht der darunterliegenden Seitenemente; über das dc:type-Attribut 'FolderWithoutTOC' kann der Mechanismus unterbunden werden.
  5. Besondere Inhaltsübersichten TOC-Listen können individuell über DTML-Code an beliebiger Stelle platziert werden. Codebeispiel:
<dtml-with "getSelf(['ZMSRubrik'])">
<dtml-in "filteredChildNodes(REQUEST,['ZMSRubrik'])">
<dtml-if 
 "getObjProperty('attr_dc_type',REQUEST)!='Resource'">
<p><i><a 
 href="<dtml-var "getHref2IndexHtml(REQUEST,deep=0)">" 
 style="text-decoration:none">
<dtml-var "getTitle(REQUEST)"></a></i></p>
<ol>
<dtml-in "filteredChildNodes(REQUEST,PAGES)">
<li>
<a href="<dtml-var "getHref2IndexHtml(REQUEST,deep=0)">"
 ><dtml-if "getObjProperty('attr_dc_date',REQUEST)">
[<dtml-var 
 "getLangFmtDate(getObjProperty('attr_dc_date', 
 REQUEST),lang,'DATE_FMT')">]
</dtml-if>
<dtml-var "getTitle(REQUEST)"></a> 
<br /></li>
</dtml-in>
</ol>
</dtml-if>
</dtml-in>
</dtml-with>

Startseite

Da die initiale Seite unter einem der primären Channel-Knoten liegt exitiert eine start.dtml, die Apache adressiert, wenn der Rquest auf das Root geht:

<!-- BO start.html -->
  <dtml-call
  "RESPONSE.redirect(content.e1664.absolute_url())">
<!-- EO start.html -->

Mehrsprachigkeit

Die Website ist bilingual (ger, eng) konfiguriert; für die Sprachvarianten exitiert ein Dictionary, der die Mehrsprachkeit der Navigations-Strings gewährleistet. Der Sprachselektor in bodyContent_FunctionTranslate funktioniert ohne JS.
Falls der User das finale "index+morphem" nicht in der URL aufruft, wird zur vom Browser identifizierten Sprache geleitet.

Kapiteldruck

Neben der normalen Druckversion von Einzelseiten mit der üblichen Funktion:
<a href="index_print_ger.html" target="_blank"><dtml-var "getLangStr('ATTR_PRINTVERSION',lang)"></a>
ist es möglich, längere Druckwerke zu erzeugen. Über eine Abfrage nach 'attr_dc_type'='Chapter' wird im bodyContent_Copyright-Template eine optionale Kapiteldruck-Option eingeblendet. Der Kapiteldruck erzeugt durch rekursive Assemblierung einen Contentstrom, der als PDF-Datei ausgegeben wird. Dafür kommt über einen vergleichbaren Aufruf <a href="index_print.pdf?lang=<dtml-var lang>" target="_blank"><dtml-var "getLangStr('PRINTCHAPTER',lang)"></a> folgende DTML-Methode zum Einsatz:

<!-- BO index_print.pdf -->
<dtml-call "REQUEST.set('l',[])">
<dtml-call "l.append('<html>\n')">
<dtml-call "l.append('<body>\n')">
<dtml-call "REQUEST.set('obs',[getSelf()])">
<dtml-call "obs.extend(getTreeNodes(REQUEST))">
<dtml-let level="obs[0].getLevel()">
<dtml-in obs>
 <dtml-if "isPage()">
  <dtml-call "l.append('<h%i>'%(getLevel()-level+1)+ 
   getTitle(REQUEST)+'</h%i>'%(getLevel()-level+1)+'\n')">
 <dtml-elif "isPageElement()">
  <dtml-call "l.append(getBodyContent(REQUEST)+'\n')">
 </dtml-if>
</dtml-in>
</dtml-let>
<dtml-call "l.append('</body>\n')">
<dtml-call "l.append('</html>\n')">
<dtml-call "RESPONSE.setHeader('Content-Type',
 'application/pdf')">
<dtml-return "html2pdf(''.join(l))">
<!-- EO index_print.pdf -->

RSS-Feed: KPOH Veranstaltungs-Termine

Das zentrale DTML-Template newsfeed.xml erzeugt einen RSS-Strom mithilfe der Attributwerte aus den Kalendereinträgen. Die Referenzierung des Kalenders geschieht über die DTML-Methode 'objMap'; dort sind diverse IDs in Form einer Mapping-Tabelle hinterlegt:
'calendar':content.e2331.e54,
'suche':content.e2379,
Hinweis: Mehr über RSS finden Sie hier.

Eingesetzte Zope-Produkte

  1. MailDropHost
  2. LDAPUserFolder
  3. TextIndexNG
  4. EPOZ-Editor
  5. weiteres: PIL - Python Imaging Library

Konfigurationen, Spezielle Objekte

Inhaltsübersicht:

  • Glossar
    Das Glossar-Objekt besteht aus zwei Speziellen Objekte: dem glossary-Container, der für Darstellung sorgt und der Datentabelle glossaryItems, die die strukturierten Inhalte aufnimmt.
  • Studienkurzinfo
    Einfache Erfassungsmaske zur kurzen Beschreibung einer klinischen Studie
  • Chart-Serie
    Das Spezielle Objekt kann das Upload-File splitten in Vorschaubilder (gif/jpg/png) und das eigentliche Binary chartfile, das die Charts z.B. in Form einer PPT-Datei enhält. Die Vorschaubilder müssen vorab mit dem Chartprogramm in hinreichend kleiner Größe als Batch ausgegeben werden. Die Bilder erzeugen jeweils eine Instanz des Repetitions-Elements "preview", von denen in der Art eines Diakasten jweils 2 nebeneinander gelistet werden. Das Upload file wird jeweils nach der Erneuerung von chartfile und preview entfernt.
  • Krankheitsbild
    Es handelt sich im zwei Spezielle Objekte: disease und case. case kann beliebig oft zu disease addiert werden. disease ist der seiten-artige Container.
  • DOI-Generator
    DOI = Digital Object Identifier, weltweit eindeutiger Zeichencode zur Identifizierung einer wissenschaftlichen Publikation, besteht aus einer konventionalisierten Codefolge, bei der der Suffix vom Informationsanbieter eindeutig für jede Publikation vergeben wird. Die Aktion erzeugt progressiv eindeutige Ziffern und erkennt durch manuelle Fehldeklarationen bedingte Doubletten. Darüberhinaus erlaubt die Aktion die Ausgabe eines DOI-Batch-File (XML) zur Aktualisierung der Publikations-Metadaten beim DOI-Regristrar.