
Erstellen Sie zuerst im Plone einen neuen Ordner. Am besten mit dem Namen uploads.

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.

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.

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:
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>
<metal:main fill-slot="main">
<tal:main-macro metal:define-macro="main">
<div metal:use-macro="here/document_actions/macros/document_actions">
Document actions (print, sendto etc)
</div>
<h1 class="documentFirstHeading">
Uploadformular
</h1>
<p class="documentDescription">
In diesem Formular koennen Sie ein Bild oder eine andere
Datei hochladen. Diese Datei wird dann hier in einer Liste
angezeigt.
</p>
<p> </p>
<!-- Uploadformular BEGIN -->
<form method="post"
enctype="multipart/form-data"
tal:attributes="action template/id"
>
<div class="field">
<label>
Datei zum Hochladen:
</label>
<span class="fieldRequired" title="Required">(Required)</span>
<div class="formHelp">
Geben Sie hier den Pfad zur Datei an, die hochgeladen werden soll.
</div>
<input type="file" name="datei" />
</div>
<input type="submit" name="form.button.hochladen" value="Abschicken" />
<input type="hidden" name="form.submitted" value="1" />
</form>
<!-- Uploadformular END -->
<p> </p>
<!-- Dateiliste BEGIN -->
<ul tal:define="file_ids python: container.daten.objectIds('File')">
<li tal:repeat="file_id file_ids">
<a href=""
tal:content="file_id"
tal:attributes="href python:container.daten[file_id].absolute_url()"
>[File]</a>
</li>
</ul>
<!-- Dateiliste END -->
<div metal:use-macro="here/document_relateditems/macros/relatedItems">
show related items if they exist
</div>
</tal:main-macro>
</metal:main>
</body>
</html>

So sieht unser fertiges Upload-Skript aus:
Code: Alles auswählen
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

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).
http://docs.neuroinf.de/PloneBook/ch6.rst#using-forms
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.

Das sieht, wenn es fertig ist so aus:

Jetzt geht es mit der Action des Skripts upload weiter. Öffnen Sie im ZMI die Datei upload und klicken Sie auf den Action-Reiter.

Das sieht, wenn es fertig ist so aus:

Und das ist das Ergebnis:

Hier ist die Rohfassung: http://gerold.bcom.at/bilder/dateiupload_in_plone.txt
lg
Gerold
