Frage
Antwort
Oft wird gefragt, wie man z.B. eine ZSQL Methode oder ein PythonScript aus einen ZPT aus aufrufen kann. Die einfache Antwort ist: man ruft es einfach aus.
Hierzu sollte man grundsätzlich verstehen, dass im Prinzip alle Objekte, die in Zope in der ZODB gespeichert sind, aufrufbar sind. Jedes Objekte hat eine Programmierschnittstelle (API), die man sowohl von ZPT, PythonScripen oder auch von DTML aufrufen kann. Hierzu muß man natürlich die API des jeweiligen Objektes kennen. Für die Standard Zope-Objekte ist die API einigermaßen vollständig in der API Referenz des Zope Books oder der Zope Onlinehilfe beschrieben.
Aufruf in ZPT (Funktion mit Parametern):
<span tal:define="result python: someobject.somemethod(arg1,arg2,...)" />
Aufruf in ZPT (Funktion ohne Parameter):
<span tal:define="result someobject/somemethod" />
Aufruf aus einen PythonScript:
result = context.someobject(arg1, arg2, ...)
Aufruf aus einer DTML Methode oder DTML Dokument:
<dtml-let result="someobject.somemethod(arg1, arg2,..)" >
...
</dtml-let>
Zu beachten:
Wenn man z.B. ein PythonScript foobar.py in der ZODB liegen dann, muß dieses über den vollen Namen aufgerufen werden:
<span tal:content="python: getattr(here, 'foobar.py')(args)" >
oder
Falls das gleiche Skript jedoch filebasiert in einem Skinfolder
(CMF, Plone) liegt, dann ist der Name der aufgerufen wird foobar
und nicht foobar.py. Die Dateien in Skinfoldern werden nämlich
anhand ihrer Endung automatisch als z.B. PythonScript erkannt. Der
vordere Teil des Dateinames wird dann Methodenname verwendet, d.h.:
'foobar.py' --> here.foobar() oder here/foobar
'blabla.pt' --> here/blabla