Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Tech-Blog / Zope / Plone: global utilities erzeugen und verwenden

Zope / Plone: global utilities erzeugen und verwenden

Mit Zope Global Utilities kann man Methoden, die man an verschiedenen Stellen in einem Portal benötigt zentral zur Verfügung stellen und an beliebigen Stellen verwenden.

Eigenschaften von global utilities

  • global utilities werden beim Start der Zope-Instanz instanziert
  • sind nicht persistent und können daher auch keine persistenten Daten enthalten
  • können problemlos jeder Zeit entfernt werden, da keien persistente Registrierung in der Datenbank erfolgt

Ein Global Utility erzeugen

Utility Klasse

Um ein global utility zu erzeugen, legen wir uns eine Datei utilities.py mit folgenden Inhalt in unserem Package an:

from zope.site.hooks import getSite

class PloneClipboardTool(object):
    """ provide some useful methods """

    def get_plone_portal(self):
        """ return the portal object """
        portal = getSite()

Utility Interface

In der Datei interfaces.py definieren wir ein entsprechendes Interface:

from zope.interface import Interface

class IPloneClipboardTool(Interface):
    def get_plone_portal(self):
        """ return the portal object """

Utility Registrierung

In der configure.zcml registrieren wir unser global utility wie folgt:

<utility
    factory=".tool.PloneClipboardTool"
    provides=".interfaces.IPloneClipboardTool"/>

Ein Global Utility verwenden

Um auf das global utility zuzugreifen, verwenden wir getUtility() oder queryUtility().

getUtility

from zope.component import getUtility
my_tool = getUtility(IPloneClipboardTool)

Sollte kein Utility gefunden werden, würde man hier einen ComponentLookupError bekommen.

*** ComponentLookupError: (<InterfaceClass inqbus.plone.clipboard.interfaces.IPloneClipboardTool>, 'test')

queryUtility

from zope.component import queryUtility
my_tool = queryUtility(IPloneClipboardTool)

Sollte kein Utility gefunden werden, würde man hier 'None' bekommen.

Der folgende Aufruf bringt uns dann das Portalobjekt zurück.

plone_portal = my_tool.get_plone_portal()

Analog kann man beliebig viele Utilities und Methoden darin erzeugen und verwenden.

abgelegt unter: ,