================
Uploads in Plone
================
Erstellen Sie zuerst im Plone einen neuen Ordner. Am besten mit dem
Namen ``uploads``.
.. image:: ploneordner_erstellen.gif
Gehen Sie danach ins ZMI und erstellen Sie unterhalb des Ordners
``uploads`` den Ordner ``daten``. Diesmal im ZMI mit dem Objekttyp
``Folder``. Das verhindert auf einfache Art, dass der Ordner mit
den Daten von Plone aus gesehen wird.
.. image:: datenordner_erstellen.gif
Erstellen Sie im Ordner ``uploads`` eine **Controller Page Template**
mit dem Namen ``index_html``. Dieser Name bestimmt, dass diese Datei
die Hauptdatei dieses Ordners ist und der Type *Controller Page Template*
ist eine erweiterte Seitenvorlage, die speziell für Formulare gemacht
wurde. Sie enthält im ZMI zusätzlich die Karteikarten *Validation*
und *Actions*. In denen kann man bestimmen, welche Skripte zum Prüfen
herangezogen werden und welche Aktionen bei Erfolg oder Misserfolg
der Prüfungen durchgeführt werden sollen.
.. image:: cpt_erstellen.gif
Als Vorlage für Seitenvorlagen verwende ich gerne
``portal_skins/plone_content/document_view``. Bei dieser Vorlage
muss man kaum mehr etwas anpassen.
Die fertige Seite sieht dann so aus::
Document actions (print, sendto etc)
Uploadformular
In diesem Formular koennen Sie ein Bild oder eine andere
Datei hochladen. Diese Datei wird dann hier in einer Liste
angezeigt.
show related items if they exist
Jetzt muss noch ein Skript erstellt werden, das beim Absenden des
Formulars aufgerufen wird. Erstellen Sie dafür ein neues Objekt vom
Typ **Controller Python Script**. Dabei handelt es sich um ein erweitertes
Python-Skript, speziell zur Verarbeitung von Formulardaten. Als
Dateinamen geben Sie hier für das Beispiel bitte "upload" an.
.. image:: uploadskript_erstellen.gif
So sieht unser fertiges Upload-Skript aus::
datadir = container.daten
if datei:
new_file = datadir.manage_addFile(
id = datei.filename,
file = datei,
)
message = "Datei wurde hochgeladen"
else:
message = "Die Datei wurde NICHT hochgeladen"
state.setKwargs({"portal_status_message": message})
return state
Achten Sie bitte darauf, dass auch ein Parameter übergeben wird. In
unserem Fall ``datei``. Siehe Bild:
.. image:: fertiges_uploadskript.gif
Wichtiger Hinweis! Das Skript fängt keine Fehler ab und auf Validatoren
gehe ich auch nicht ein. Alles weitere erfahren Sie im Plone Buch von
Andy McKay im Kapitel 6.4 (Formulare verwenden).
Jetzt müssen die beiden Dateien miteinander verbunden werden. Das geschieht
über die jeweiligen *Action*-Reiter.
Öffnen Sie im ZMI die Datei ``index_html`` und klicken Sie auf den
*Action*-Reiter.
.. image:: index_html_action_erstellen.gif
Das sieht, wenn es fertig ist so aus:
.. image:: index_html_action_erstellt.gif
Jetzt geht es mit der Action des Skripts ``upload`` weiter. Öffnen Sie im
ZMI die Datei ``upload`` und klicken Sie auf den *Action*-Reiter.
.. image:: upload_action_erstellen.gif
Das sieht, wenn es fertig ist so aus:
.. image:: upload_action_erstellt.gif
Und das ist das Ergebnis:
.. image:: fertige_seite.gif
Wenn man sich aber abmeldet, dann bemerkt man, dass kein Upload ohne
Anmeldung möglich ist. Dem kann man dadurch entgehen, indem man dem
Skript, das mehr Rechte braucht, eine Proxyrolle zuweist.
Dafür öffnen Sie das Skript ``upload`` im ZMI. Klicken Sie auf den
Reiter *Proxy*. Wählen Sie **Manager** aus und bestätigen Sie mit einem
Klick auf *Save Changes*
.. image:: proxyrolle_zuweisen.gif