Plone Workshop
CD content C 2005 robert rottermann, redCOR AG
Einführung in Plone
- Einführung in Plone
Was ist das Ziel
Am Ende des Workshops sollen die TeilnehmerInnen in der Lage sein, eine Zope und Plone Installation auf Ihrem Rechner einzurichten und eine Plone Site einzurichten.
Wir lernen die wichtigsten Elemente von Plone kennen und erhalten einen Einblick in die Möglichkeiten, die Plone zur Konfiguration bereitstellt.
Um diese Möglichkeiten kennenzulernen, werden einige davon angewandt. Die ausprobierten Anpassungen umfassen einfache Vorgänge wie das ein- und ausschalten von Portlets, bis zum Erstellen eines eigenen Portaltyps. Für die komplexeren Aufgaben stehen vorbereitete Beispiele und Scripts zur Verfügung.
Installation Zope und Plone
Die Installation von Zope ist im Workshop Zope Einfuehrung beschrieben
Die Installation von Plone ist in Plone Installation from Source beschrieben
Installation von Plone auf Windows
Es gibt einen Windows Installer für Plone, der nichts als ein paar Klicks mit der Maus braucht, um eine vollständige Plone Installation zu machen. Diese Variante ist OK für jemanden, der Plone nur ein wenig beschnupppern will. Will man es jedoch "seriös" brauchen, empfehle ich Zope und Plone von Grund auf zu installieren. Man hat so eine wesentlich bessere Kontrolle über das was passiert.
Zuerst ist Zope korrekt zu installieren (siehe Workshop Zope Einfuehrung)
Bei der Installation von Zope wurde eine Zope Instanz angelegt(nachlesen!!) Entpacken Sie Plone im Instanz-Produkte-Verzeichnis. Plone ist auf der CD im Verzeichnis ZopedownloadPloneXX.tar.gz
Ev. gibt es auf http://plone.org/downloads eine neuere Version. Bitte nicht den Windows-Installer, sonder Plone-Core verwenden.
Wenn alle Vorgaben übernommen wurden, muss Plone im folgenden Directory entzippt werden:
c:\Zope-Instance\Products
Dabei wird darin ein Directory angelegt:
c:\Zope-Instance\Products\Plone-XX
Unter Windows müssen alle in diesem Directory angelegten Directories eine Hierarchiestufe hoch kopiert werden. Das Resultat muss in etwa so aussehen:
C:\Zope-Instance\Products>dir /b
Archetypes
BTreeFolder2
CMFActionIcons
CMFCalendar
CMFCore
CMFDefault
CMFFormController
CMFPlone
CMFQuickInstallerTool
CMFTopic
DCWorkflow
Epoz
ExternalEditor
Formulator
generator
GroupUserFolder
PlacelessTranslationService
Plone-2.0.5
PloneErrorReporting
PortalTransforms
README.txt
validation
Der Ordner PloneXX kann anschliessend gelöscht werden.
Plone ist jetzt fertig installiert und kann gestartet werden. Dazu muss Zope gestoppt und wieder gestartet werden (ca 100x ^C im Dos Fenster drücken, anschliessend aus Windos start->Programme->!ZopeXX->Run Zope In Console).
Eine Site anlegen
Zum Anlegen einer Site muss Zope gestartet und ein Browser geöffnet werden. Zope kann mit dem URL "http://SERVER:PORT/manage" aufgerufen werden. Dabei steht SERVER für den Server auf dem Zope läuft, in unserem Falle localhost, PORT für den Port den wir in bei der Konfiguration von Zope gewählt haben. In unserem Falle ist das 'http://localhost:8080/manage'
In unserer Zope-Instanz legen wir einen Folder an (wie man das macht, bitte in Using The Zope Management Interface nachlesen). Seinen Namen wählen wir "beliebig aber vernünftig". In diesem Ordner legen wir eine Plone Instanz an.
Anlegen und Bearbeiten von Content
Plone "raison d'être' ist das Anlegen und Bearbeiten von Content. Es ist daher nicht erstaunlich, dass das einfach ist. Wir werden uns aber trozdem ein Tutorial dazu in unserer neuen Site einbauen. Das machen wir über die Import/Export Möglichkeit von Zope. Die einzulesende Datei ist hier hilfe.zexp . Diese Datei kopieren wir in das import Verzeichnis von Zope. (z.b. c:\Zope-instance\import) Anschliessend wechseln wir im ZMI in unsere neue Plone Site und importieren die Datei an einen sinvollen Ort.
folgende Schritte sind auszuführen:
- Anlegen eines Folders
- Anlegen einer Plone-Instanz
- Kopieren von hilfe.zexp ins Import-Verzeichnis
- importieren von hilfe.zexp im ZMI
- Umbenennen von .Hilfe nach hilfe (.Hilfe ist der in hilfe.zexp gespeicherte Foldername)
Anlegen und Bearbeiten von Content
- Wechseln in den eigenen Homefolder
- Einfügen eines Dokumentes (Kurzbezeichnung und Titel sinnvoll wählen)
- Inhalt von Datei (Eingabemöglichkeit ganz unten). Beliebige Text-Datei wählen
- Mit anzeigen/view darstellen
- Mit bearbeiten (edit) in den Bearbeitungsmodus wechseln
- Den Typus (Dialog unten an der Seite) auf Einfacher Text (Plain Text) wechseln. Was ist der Unterschied?
Die Struktur von Plone
Eine Plone/Zope Site besteht aus vielen verschiedenen Elementen. Es ist nicht einfach, diese zu kategorisieren, da die meisten verschiedene Funktionen zu erfüllen haben und daher mehr als einer Kategorie zugeordnet werden können. Dementsprechend ist die folgende Einteilung zu verstehen.
Inhalt
Inhalt sind Dokumente, Webseiten, Formular usw. Navigation und Inhalt überschneiden sich offensichtlich. Was des einen Inhalt ist, ist des andern Navigation.
Funktion
Funktion stellt Automatismen zur Verfügung, die den Nutzer einer Site beim Erstellen von Inhalt oder Navigieren durch die Site unterstützen. Es stehen uns eine Vielzahl von Quellen solcher Funktionen zur Verfügung.
- Templates
Das sind Html-Seiten-Vorlagen, die in der Lage sind, Bereiche mit dynamischem Inhalt zu füllen (siehe Workshop Zope Einfuehrung )
- Python Scripts
Scripts, die fast beliebige Manipulationen sowohl am Inhalt einer Site als auch mit der Navigation machen können (siehe Workshop Zope Einfuehrung )
- Werkzeuge
Das sind Funktionssammlungen, die als Objekte in einer Plone-Site zur Verfügung stehen. Sie werden meist mit dem Werkzeug portal_quickinstaller installiert. Es ist üblich (aber nicht notwendig), dass ihre Namen in der Art von portal_XXX lauten. Dabei gibt XXX einen Hinweis auf die Art der Funktionen, die das Werkzeug bereitstellt. Mehr dazu finden Sie unter portal_form_tools. Ein Werkzeug kann erst gebraucht werden, wenn es als (Teil eines) Produkt(es) auf Betriebssystem-Ebene in die Zope Umgebung installiert wurde
- Produkte
Ein Produkt ist eine Sammlung von Python-Programmen. Es muss auf Betriebssystem-Ebene in das Products_verzeichnis von Zope oder einer Zope-Instanz installiert werden.
Kontrolle
Üblicherweise soll kontrolliert werden, wer was wo auf einer Zope/Plone Site machen darf. Dazu stellt uns Zope ein sehr feinkörniges Sicherheitskonzept zur Verfügung. Es stehen uns folgende Konzepte zur Verfügung, die aber hier nicht weiter vertieft werden.
- User
Ein in der Nutzerdatenbank (acl_users) registrierter Benutzer
- Rolle
Eine Rolle, die einem Nutzer zugeordnet ist. Zugriffsrechte werden einer Rolle nie einem User zugeordnet.
- Gruppen
Eine Möglichkeit, einer Gruppe von Nutzern Rollen zuzuteilen.
- Lokale Rollen
Die Rolle, die ein Nutzer hat, bezieht sich immer auf ein Objekt. Dabei ist ein Objekt das Dokument, das gerade dargestellt wird. Beim Darstellen eines Objektes werden immer eine Reihe weiterer Objekte (z.B. die Portlets) angefasst. Es genügt daher in der Regel nicht, nur das Recht des aktuellen Nutzers auf einem bestimmten Objekt zu betrachten.
Aussehen/Verhalten
Aussehen und Verhalten einer Site wird von Skins bestimmt. Das sind geordnete, auswechselbare Sammlungen von Templates und Scripts. Sie bestimmen in ihrer Gesammtheit, wie sich eine Site in einem bestimmten Zustand (also z.B. wenn die Seite XY geöffnet ist) aussieht und verhält.
Eine Skin bezeichnet eigentlich zwei verschiedene Dinge:
- Einen Skin-Pfad
Das ist, analog einem Programm-Suchpfad, eine Abfolge von Orten, wo ein bestimmtes Template, Script, Dokument oder sonstiges Objekt gesucht wird. Der Ordner portal_skins/custom ist immer das erste Element dieses Suchpfades. Objekte in diesem Ordner werden also zuallererst gefunden. Dementsprechend dient der Custom-Odner dazu, Objekte anzupassen, die von Plone oder einem anderen Produkt zur Verfügung gestellt werden.
- Eine Vielzahl von Skin-Directories (bzw. "Filesystem Directories").
Das sind Ordner im Filesystem, in denen Sammlungen von Python-Scripts, Templates, Bilder usw abgelegt sind. Jedes Produkt bringt seine eigene Sammlung solcher Skins mit sich, die bei der Installation des Produktes in das portal_skins Tool "eingehängt" werden.
Plone in den eigenen Desktop einbetten
Zope ist nicht nur eine HTTP und FTP sondern auch ein WebDav-Server. Es ist daher sehr einfach, eine Plone Site direkt aus dem Windows-Desktop zu bedienen. Da Microsoft Webdav zwar in allen gängigen Windows-Versionen unterstützt, aber bei jedem Patch und bei jeder Office-Version neue Probleme auftauchen, empfehlen wir den Einsatz des von Novell kostenlos bereitgestellten Netdrive. Sie finden das Werkzeug hier NetDrive
Zope muss konfiguriert werden, damit es einen WebDav-Server startet. Das geht, indem in Zope's Konfigurationsdatei (c:\Zope-Instanceetczope.conf) die Anweisung für den WebDavserver auskommentiert und eine passende Port-Addresse angegeben wird.
Ca. bei Zeile 860:
<webdav-source-server>
# valid keys are "address" and "force-connection-close"
address 9080
force-connection-close off
</webdav-source-server>
Zope wird einen WebDav-Server an Port 9080 starten.
Ein Portlet anpassen
Soll ein eigenes Portlet erstellt werden, versucht man am besten von einem bestehenden auszugehen. Wir wählen portal_skins/plone_portles/portlet_news und clicken auf customize. Dadurch wird es in den custom Ordner kopiert.
Anschliessend nehmen wir folgende Anpassungen vor:
<div metal:define-macro="portlet" tal:define="results python:request.get('news',
here.portal_catalog.searchResults(portal_type='News Item',
sort_on='Date',
sort_order='reverse',
review_state='published')[:5]);" tal:condition="python:test(template.getId()!='news' and results, 1, 0)">
ersetzen wir zu:
<div metal:define-macro="portlet" tal:define="results python:here.listHelpFiles()[:5];">
die Zeile:
<h5 i18n:translate="box_news">News</h5>
ersetzen wir zu:
<h5>Hilfe</h5>
die Zeile:
<h5 i18n:translate="box_news">News</h5>
ersetzen wir zu:
<h5>Hilfe</h5>
die Zeile (ca in der Mitte des Templates):
<span tal:replace="python:test(obj.Title, obj.Title, obj.getId)"> Extended Calendar Product </span>
ersetzen wir zu:
<span tal:replace="obj/title_or_id"> Extended Calendar Product </span>
- die beiden Blöcke::
- <div class="portletDetails" tal:content="python:here.toPortalTime(obj.Date)">July 7, 08:11</div>
und:
<div class="portletContent odd">
<a href="" class="portletMore" tal:attributes="href string:${utool}/news" i18n:translate="box_morelink">
More...
</a>
</div>
löschen wir vollständig.
Das Resultat ist:
<!-- The news box -->
<div metal:define-macro="portlet" tal:define="results python:here.listHelpFiles()[:5];">
<div class="portlet" id="portlet-news">
<h5>Hilfe</h5>
<div class="portletBody">
<tal:block tal:repeat="obj results">
</tal:block><div tal:define="oddrow repeat/obj/odd" tal:attributes="class python:test(oddrow, 'portletContent even', 'portletContent odd')">
<a href="" tal:attributes="href obj/absolute_url;
title obj/Description">
<tal:block replace="structure here/newsitem_icon.gif">
<span tal:replace="obj/title_or_id"> Extended Calendar Product </span>
</tal:block></a>
</div>
</div>
</div>
</div>
Anschliessend nennen wir das Portlet zu 'portlet_help' um.
Im Portlet wird 'listHelpFiles()' aufgerufen. Das ist eine Methode, die noch nicht existiert. Wir legen deshalb ein Python-Script unter diesem Namen in portal_skins/custom an. Dazu wählen wir in der Dropdownliste rechts oben Script(Python) und clicken auf "Add". Anschliessend füllen wir das Feld "id" mit 'listHelpFiles' aus.
Das Script besteht aus folgender Zeile:
return context.hilfe.objectValues()
Unser neues Portlet ist jetzt funktionstüchtig, wir können es mit dem Reiter Test ausprobieren.
Damit es auch aufgerufen wird, ergänzen wir einen der Slots mit einem Aufruf des Portlets.
Dazu klicken wir im ZMI auf den Reiter "Properties" und ergänzen die Eigenschaft "right_slots" mit der Zeile:
here/portlet_help/macros/portlet
Einen Wysiwyg Editor einbauen
Im Plone Umfeld, bieten sich zwei Wysiwyg_Editoren an. Epoz ist ein bewährter Editor, der von Maik Jablonsky von der Universität Bielefeld entwickelt und betreut wird. Diesen werden wir installieren.
Der zweite ist Kupu. Das ist eine auf Epoz aufbauende Neuentwicklung. Er ist moderner und flexibler, aber teilweise noch etwas "unrund"
Installation eines neuen Produktes
Damit ein neues Produkt in Zope verfügbar ist, muss es installiert werden. Dazu sind folgende Schritte notwendig.
Produkt-Archiv aus dem Internet auf den eigenen Rechner laden.
Archiv im Produkte-Verzeichnis von Zope (hier c:\Zope-instance\Products) auspacken.
- README.txt und INSTALL.txt lesen.
- ev weitere Installationschritte ausführen
Zope restarten
Epoz ist hier zu finden Kupu ist hier zu finden
Sobald das neue Produkt in Zope verfügbar ist, kann es mit dem quick_installer Tool in die Plone-Umgebung eingebettet werden.
Um Epoz (bzw Kupu) zu nutzen sind folgende Schritte notwendig:
- Reiter "plone konfiguration" wählen
- Produkte hinzufügen/löschen
- Epoz XX wählen -> installieren
Für den eigenen Bedarf einrichten
Epox ist jetzt zwar installiert, steht dem eingeloggten Nutzer aber noch nicht zur Verfügung.
Dazu sind noch die folgenden Schritte notwendig:
Reiter "meine einstellungen" wählen
- Meine Einstellungen
- E-Mail Feld füllen
- Texteditor wählen
Für alle Nutzer einrichten
Damit jedem Nutzer automatisch Epoz als Editor eingetragen wird, müssen wir Einstellungen über das ZMI vornehmen:
- Tool portal_memberdata wählen
- Reiter Properties wählen
- Feld wysiwyg_editor füllen
ZWiki einrichten
Für Zope und Plone installieren analog wie bei Epoz beschrieben.
Was ist ein Wiki
Ein Wiki ist ein Werkzeug, um sehr schnell und einfach "akzeptabel" formatierte Informationen in ein Portal einzubringen.
Einfügen eines neuen Wiki Folders
Dazu sind folgende Schritte notwendig:
- Ordner anlegen
- in diesem Ordner eine Wikipage einfügen, Namen "sinnvoll" d.h. themenbezogen wählen
Eine automatische Sicht mit einem index_html
Das neue Wiki wird nicht automatisch angezeigt, wenn auf den "Wiki"-Ordner gewechselt wird. Dazu ist ein Objekt mit Namen "index_html" im Ordner notwendig, das die Haupt-Wikiseite aufruft. Um ein solches Objekt in den Ordner einzubringen, sind folgende Schritte nötig:
im ZMI in den "Wiki"-Ordner wechseln
ein Objekt von Typ "DTML method" anlegen. Als ID erhält sie 'index_html'
ihr Inhalt ist:
<dtml-call ="" response.redirect(_['url1="" +="" '/xxx="">Wobei XXX für den Namen der Hauptwikiseite steht.
Einen neuen Objekt Typ erstellen
Ein Objekt-Typ mit mehr Intelligenz
Wir haben gesehen, dass das Erstellen eines Wiki-Folders recht mühsam ist, wir wollen dies automatisieren. Dazu erstellen wir im Custom Ordner ein Script mit folgendem Inhalt:
## Script (Python) "AATest"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=self, id
##title=
##
def addWikiFolder(self, id):
# Create a regular plone folder
self.invokeFactory(type_name = 'Folder', id = id)
wiki = getattr(self, id)
# Populate the folder with the default pages
wiki.manage_addProduct['ZWiki'].addWikiPage(id)
content='<dtml-call ="" response.redirect(_[\'url1="" +="" \'/%s="">' % id
wiki.manage_addProduct['OFSP'].manage_addDTMLMethod('index_html', id)
dtml = wiki['index_html']
dtml.manage_edit(content, id)
return wiki
wiki = addWikiFolder(self, id)
context.REQUEST.RESPONSE.redirect(wiki.absolute_url())
Einen eigenen Portal-Typ von diesem Script ableiten
Um einen eigenen Portal-Typ von diesem Script abzuleiten, gehen wir wie folgt vor:
in ZMI:
* goto portal_types
* add new (Script) Python
o id: addPopulatedFolder
o title: prepopulated folder
o parameters: container, id
In portal_types in the drop down list there is a 'Scriptable Type Information'; add it.
* you only need to fill out two fields:
o id: Populated Folder
o use Default Type Information: CMFPlone: Plone Folder
* now that you've created the type information, click on it to edit it.
o Constructor permission: Add portal content
</dtml-call></dtml-call></div></div>
da wollt ich doch auch was sagen