Ich hab mal so ein simples Rechen Template erstellt...
Zu erst hab ich mir einen Ordner gemacht und ein Template erstellt:
Control Page Template...
Code: Alles auswählen
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en"
metal:use-macro="here/main_template/macros/master"
i18n:domain="plone">
<body>
<div metal:fill-slot="main"
tal:define="is_manager python: checkPermission('Manage portal', here);">
<h1>Rechnen</h1>
<form action="rechenMethode"
method="post"
name="search"
tal:define="DateTime python:modules['DateTime'].DateTime">
<fieldset>
<!--<div tal:content="python:context.REQUEST"></div>-->
<div class="field">
<label>Zahl 1</label><br>
<input type="text"
name="zahl1"
size="25"
tabindex=""
tal:attributes="tabindex tabindex/next;
value python:context.REQUEST.get('zahl1')"
/>
</div>
<div class="field">
<label>Rechenoperation</label><br>
<input type="text"
name="zeichen"
size="25"
tabindex=""
tal:attributes="tabindex tabindex/next;
value python:context.REQUEST.get('zeichen')"
/>
</div>
<div class="field">
<label>Zahl 2</label><br>
<input type="text"
name="zahl2"
size="25"
tabindex=""
tal:attributes="tabindex tabindex/next;
value python:context.REQUEST.get('zahl2')"
/>
</div>
<div class="field">
<label>Ergebnis</label><br>
<input type="text"
name="ergebnis"
size="25"
tabindex=""
tal:attributes="tabindex tabindex/next;
value python:context.REQUEST.get('ergebnis')"
/>
</div>
<div class="formControls">
<input class="context"
tabindex=""
type="submit"
name="submit"
value="Submit"
tal:attributes="tabindex tabindex/next;"
/>
</div>
</fieldset>
</form>
</div>
</body>
</html>
Bei diesem Template habe ich noch folgendes eingestellt (oben im Reiter auf Actions):
Edit default Actions:
Status: success
context: any
action: traverse_to
argument:string:rechenMethode (das ist mein python script)
Hier das Control Python Script:
Code: Alles auswählen
##Script (Python) "rechenMethode"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=REQUEST=None
##title=
##
request=context.REQUEST
zahl1=request.get('zahl1')
zahl1=int(zahl1)
zahl2=request.get('zahl2')
zahl2=int(zahl2)
zeichen=request.get('zeichen')
if zeichen=='+':
ergebnis=zahl1+zahl2
request.set('ergebnis',ergebnis)
return state
Bei dem Python Script hab ich auch noch folgendes Eingestellt:
Edit default Actions:
status: success
context: any
action: traverse_to
argument:string:rechner (so heißt mein template)
Die 2. default Action:
status: failure
context: any
action: traverse_to
argument:string:rechner (so heißt mein template)
So und das ist nur ein Simples Teil, ohne Valedierung, es kann nur mit "+" rechnen (wie zu sehen ist im Pythonscript, da kann man das auch erweitern) und ich haben bei der Templateseite im Header die Informationen einer bereits bestehenden Seite verwedet!
Ich hafte für nix...
Der Gerold kann dir da genauer auskunft geben, über die ganzen Funktionsweise und Vorgänge. Ich will dir ja nix falsches erzählen.
Bei mir ist es so, dass ich alle Informationen des Templates an die "rechenMethode" schicke (siehe im Action- Reiter und in der "Form" wo die action auch "rechenMethode" ist). Da hole ich mir die Werte aus dem Request und schreibe diese in die Variablen (zahl1, zahl2, zeichen).
Mit den Werten durchlaufe ich eine schlichte If- Anweisung (da frage ich ob ein plus eingegeben wurde) und mit REQUEST.set('ergebnis',ergebnis) setze ich den Wert im Request.
Nun gebe ich wieder alles zurück und auf der Seite werden diese Daten ebenfalls ausgewertet und den Wert des ergebnisses schreibe ich in das "Ergebnisfeld".
mfg mitch
ps: Natürlich kannst du auch ohne die Macros im Header eine Seite erstellen und auswerten lassen, allerdings fehlt dir dann die optische Gestalltung![/code]