420 likes | 545 Views
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.
E N D
Nano-WorldThe interdisciplinary Virtual Laboratory on Nanoscience Ein Projekt des Virtuellen Campus T. Gyalog, M. Guggisberg, R. Schneider,Ch. Freiburghaus, P. Fornaro, B. WilliH. Burkhart, H.-J. Güntherodt Centre Suisse de Micro-technique et d‘ElectroniqueUniversität BernUniversität Fribourg Universität BaselFachhochschule beider BaselScuola universitaria della svizzera italiana
Aufgaben des Portals • Informations + Wissensverwaltung • Aufgabenteilung • Schnittstelle für neue Dienste • Mehrsprachigkeit • Hierarchie und verschiedener Berechtigungen • Wartbarkeit (Backup, XML, usw.) • Sicherheit
Installation • Auf NT trivial • Starten mit:start.bat • Auschalten via Netz Python www.python.org Zope Module Squis.dot
JDK 1.2 Servlet Container Web Server Client Database Zope Database Funktions-Schema
Objektstruktur von Zope • Vererbung • Dynamische HTML-Generierung • Globale Layoutdefinition
site_header leftbox rightbox body_de_html www.nanoworld.unibas.ch
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>
XMLProduct 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
XMLAusgabe • 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>
XMLBsp. 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>
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
Nur PC‘s • <dtml-if "_.string.find(HTTP_USER_AGENT,'Win') == -1"> • <dtml-else>
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'
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)