Nano-World The interdisciplinary Virtual Laboratory on Nanoscience Ein Projekt des Virtuellen Campus T. Gyalog, M. Guggisberg, R. Schneider, Ch. Freiburghaus, P. Fornaro, B. Willi H. Burkhart, H.-J. Güntherodt Universität Basel Fachhochschule beider Basel Scuola universitaria della svizzera italiana Centre Suisse de Micro-technique et d‘Electronique Universität Bern Universität Fribourg Aufgaben des Portals Informations + Wissensverwaltung Aufgabenteilung Schnittstelle für neue Dienste Mehrsprachigkeit Hierarchie und verschiedener Berechtigungen Wartbarkeit (Backup, XML, usw.) Sicherheit Server Software: Zope http://www.zope.org Installation Auf NT trivial Starten mit:start.bat Auschalten via Netz Python www.python.org Zope Module Squis.dot Funktions-Schema JDK 1.2 Client Web Server Servlet Container Database Zope Database Objektstruktur von Zope Vererbung Dynamische HTML- Generierung Globale Layoutdefinition www.nanoworld.unibas.ch site_header leftbox body_de_html rightbox Layout & Mehrsprachigkeit Eingabe Interface Zentrale Änderung Wartung Inhalt eines Ordners anzeigen <dtml-in expr="objectValues('Folder')"> <li> <a href="&dtml-absolute_url;"><dtml-var title></a><br> </li> </dtml-in> Erweiterung <dtml-if directory_items> <dtml-in directory_items> <li> <A href="<dtml-var site_url ><dtml-var urlname>"><dtml-var name></A></li> </dtml-in> <dtml-else> <dtml-in expr="objectValues('Folder')"> <li> <a href="&dtml-absolute_url;"><dtml-var title></a><br></li> </dtml-in> </dtml-if> XML Product XML Document Einfügen: Ein neues XML Dokument erstellen. Das XML Dokument ist somit in die Zope Datenbank integriert und kann mit eigenen Funktionen manipuliert werden XML Ausgabe Zope dtml-method <dtml-var standard_html_header> <h2>Q</h2> <p><dtml-var "text_content('question')"></p> <h2>A</h2> <p><dtml-var "text_content('answer')"></p> <dtml-var standard_html_footer> XML XML Bsp. 2 Alle Fragen anzeigen: <dtml-var standard_html_header> <h2><dtml-var "getAttribute('title')"></h2> <dtml-in "getElementsByTagName('entry')"> <p><a href="<dtml-var absolute_url>/viewEntry"> <dtml-var "text_content('question')"></a></p> </dtml-in> <dtml-var standard_html_footer> XML Kommunikation Mail, Fax, SMS Kommunikation Mail, Fax, SMS Kommunikation Mail, Fax, SMS Kalender dtml-calendar <dtml-calendar> <dtml-call "setCalendar('valign','top')"> <dtml-let d="date.Date()" hasdate="hasProperty(d)" dprop="getProperty(d)"> <dtml-if "AUTHENTICATED_USER.getUserName()=='guggi'"> <a href="index_html/editCalPropForm?prop=<dtml-var d>&propval=<dtml-var dprop url_quote>"> <dtml-var "date.dd()"> </a> <dtml-else> <dtml-var "date.dd()"> </dtml-if> <br> <dtml-if "hasdate==1"> <dtml-var dprop> </dtml-if> </dtml-let> </dtml-calendar> Externe Methode Perl oder Python muss im Ordner Extension stehen Bsp: editCalendarProperty.py def editCalendarProperty(self,REQUEST,RESPONSE): if ( self.hasProperty(REQUEST['prop']) ): self.manage_changeProperties({ REQUEST['prop'] : REQUEST['propval'] }) else: self.manage_addProperty(REQUEST['prop'], REQUEST['propval'], 'string') return REQUEST.RESPONSE.redirect(REQUEST['BASE2']) Futur Authentication via SQL Databank User tracking RPC-XML Parsed XML – Webtest (Semesterarbeit) Testen neuer Module – Bsp. Meerkat news service – Bsp. Portal Toolkit REQUEST <dtml-var "REQUEST"> Nur PC‘s <dtml-if "_.string.find(HTTP_USER_AGENT,'Win') == -1"> <dtml-else> Integration von Flashobjekten Flash Formular zum Cookie setzen <FORM NAME="formular" METHOD="POST" ACTION="report"><P> Name: <INPUT TYPE="TEXT" NAME="qkey" SIZE=30 MAXLENGTH=30><BR> Value: <INPUT TYPE="TEXT" NAME="qvalue" SIZE=30 MAXLENGTH=30><BR> <INPUT TYPE="submit" VALUE="Submit"> </Form> Formular auswerten Cookie setzen <p> Das Cokie ist plaziert !!! <dtml-call "RESPONSE.setCookie(_['qkey'],_['qvalue'], expires='Wed, 19 Feb 2020 14:26:00 GMT')"> </p> Cookie lesen <p> das Cokie heisst:<BR> <dtml-in expr="REQUEST.cookies.keys()"> <dtml-var sequence-item> --> <dtml-var expr="REQUEST.cookies.get(_['sequence-item'])"><br> </dtml-in> </p> Variablen setzen <dtml-call "REQUEST.set('geprueft','')"> <dtml-in z-sqlmeth size=1> <dtml-call "REQUEST.set('geprueft','ok')"> ….. </dtml-in> <dtml-if "geprueft!='ok'"> Externe Methoden save in Extension Folder of Zope def helloWorld(self): """ hier kommt nur eine Ausgabe """ return 'Nano-World' aus addlist external method <dtml-var sayhello> Python ganze, komplexe, Gleitkomma Zahlen Listen, Dictionaries (assoziative Felder) objektorientiert Klassen wie c++ Exceptions Class class Stadt(Gemeinde): def __init__(self,name,seit): Gemeinde.__init__(self,name) self.stadtrecht=seit def zieht_um(self, von, leute): for mensch in leute: von.zieht_aus(mensch) self.zieht_ein(mensch) Berlin=Stadt(´Berlin´,1234); Polimorph class Stadtstaat(Stadt, Land): def __init__(self,name,seit, parlamentsgr): Stadt.__init__(self,name,seit) Land.__init__(self,parlamentsgr)