Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Plone: Initiale Objekte erzeugen mit constructContent

Plone: Initiale Objekte erzeugen mit constructContent

Die Methode container.invokeFactory() berücksichtigt die Regeln in portal_types, ob ein Objekt in diesem Kontext angelegt werden darf oder nicht. Mit portal_types.constructContent() kann diese Prüfung umgehen.

In Plone werden Objekte meist über die Methode container.invokeFactory() angelegt. InvokeFactory berücksichtigt die Regeln in portal_types, ob ein Objekt in diesem Kontext angelegt werden darf oder nicht. Das heißt, wenn wir in Plone ein Objekt anlegen wollen, muss es auch an dieser Stelle über das Plone-UI möglich sein, dieses hinzufügen. Mit portal_types.constructContent() können wir jedoch ein Objekt anlegen ohne, dass man es über das Plone-UI erlauben muss. Dies ist vor allem beim Erzeugen von initialen Strukturen sehr hilfreich.

Anlegen von Objekten mit invokeFactory

Wir rufen auf dem Kontainerobjekt die methode invokeFactory auf und erzeugen so das neue Objekt in diesem Kontainer. Dies ist der Standard, er wird nur funktionieren, wenn es allgemein erlaubt ist, dieses Objekt hier anzulegen.

container.invokeFactory()

Anlegen von Objekten mit contructContent

Wir holen uns das TypesTool und rufen dort die Methode constructContent auf und geben ihr den Objekttyp, einen Kontainer und die id für das zu erzeugende Objekt mit. Die Methode ist wie folgt in Products.CMFCore.TypesTool definiert:

def constructContent( self
  , type_name
  , container
  , id
  , RESPONSE=None
  , *args
  , **kw
):

Hier ein Beispielhafter Aufruf, der einen speziellen DocsOrdner im Plone Root anglegt, obwohl man ihn dort nicht manuell anlegen darf:

from Products.CMFCore.utils import getToolByNameportal = getSite()
portal_types = getToolByName(portal, 'portal_types')
portal_types.constructContent('DocsFolder', portal, 'docs', **{'title':'Docs'})