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.)

Zoom (10KB)

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

Zoom (10KB)

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

Zoom (9KB)

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

Print this Document   change language   Sitemap   Contact
BMBF-Förderung
Das Bundesministerium für Bildung und Forschung (BMBF) fördert dieses und andere Kompetenznetze. Mehr...mehr