===========================
Views und browser resources
===========================
Nachdem die Artikeltypen mit ihrem jeweiligen Schema erstellt wurden, gehen wir
nun zum User-Interface über, dessen Code sich im ``browser``-Paket befindet.
Icons und Stylesheet-Dateien
============================
Für jeden Artikeltyp wird ein eigenes Icon definiert in
``browser/configure.zcml``, in unserem Fall::
Dieses Icon kann referenziert werden mit ``++resource++registration_icon.gif``.
Um das Icon innerhalb eines Page Templates aufzurufen, können Sie folgendes
angeben::
Dem Icon analog lässt sich auch ein Stylesheet-Dokument hinzufügen mit::
Diese Datei können Sie mit folgendem Code in ein Page Template einfügen::
Views
=====
Auch die Views werden in ``browser/configure.zcml`` registriert::
Üblicherweise wird die Standardansicht eines Artikeltyps mit ``@@view``
aufgerufen.
Sollen Autoren zwischen verschiedenen Ansichten eines Artikeltyps in Plones
Ansicht-Menü wählen können, müssen diese Ansichten einerseits in einer Liste im
GenericSetup-Profil angegeben werden, andererseits jedoch auch in
``browser/configure.zcml`` registriert werden::
...
``action`` verweist auf den Namen der Ansicht, wobei der Menüeintrag nur für das
``IRegistration``-Interface angezeigt wird.
Die View-Klasse selbst enthält die Methoden ``name`` und ``details``::
from Products.Five import BrowserView
class RegistrationView(BrowserView):
"""A view of a Registration object"""
def name(self):
return self.context.Title()
def details(self):
return self.context.Description()
Der Decorator ``@memoize`` stellt sicher, dass der Aufruf in einer Instanz nur einmal ausgeführt wird – und der zurückgegebene Wert gespeichert wird. Wenn Templates eine Methode mehrfach aufrufen, kann so die Performance deutlich gesteigert werden (s.a. `Memoize <../produktivserver/caching/memoize.html>`_). Das Template ``registration.pt`` sieht dann so aus::
This item does not have any body text, click the edit tab to change it.
Registrants
-
show related items if they exist
Das Template entspricht weitgehend Plones ``document_view.pt``.
Beachten Sie, dass verschiedene Viewlet-Manager angegeben wurden, wie z.B.::
Im Kapitel `Viewlets <../erscheinungsbild/viewlets>`_ wird ausführlich auf diese
Zope3-Komponenten eingegangen.
Content-Menü
------------
Üblicherweise wird das Content-Menü mit den Menüs *Darstellung, *Hinzufügen* und
*Workflow* in Views nicht angezeigt. Falls es dennoch angezeigt werden soll,
müssen Sie das ``IViewView``-Interface aus ``plone.app.layout`` erhalten::
from zope.interface import implements
from Products.Five.browser import BrowserView
from plone.app.layout.globals.interfaces import IViewView
class MyView(BrowserView):
implements(IViewView)
Inline Editing
--------------
In diesem Template wurde auch das Inline-Editing mit Kinetic Style Sheets
ermöglicht, z.B. mit::
Soll ein Feld nicht direkt editiert werden können, genügt ein einfacheres
Konstrukt::
Mehr über das JavaScript-Framework erfahren Sie im Kapitel
:doc:`../erscheinungsbild/kinetic-style-sheet/index`.