DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Create, Publish, Hide & Global Disallow A Plone Content Type From Python

01.07.2009
| 3469 views |
  • submit to reddit
        Implemented in setuphandlers.py; 
during installation of the product create an object at the root level; 
hide it from the navbar; 
publish it & also do not let the Content Type to be globally allowed. 
context is assumed and Content Type is any. 
Solution:

 
We need these tools: 
>>> from Products.CMFCore.utils import getToolByName
>>> workflow_tool = getToolByName( portal, 'portal_workflow' )
>>> portal_types = getToolByName( portal, 'portal_types' ) 

A sample content type: 
>>> ContentTypeName = 'Archive'

Get the portal root: 
>>> portal = context.getSite()

Create object at the portal root level: 
>>> portal.invokeFactory( ContentTypeName, id='AtTheRootLevel', title='At The Root Level' )

Grab the object:  
>>> AtTheRootLevel = getattr( portal, 'AtTheRootLevel' ) 

Publish it: 
>>> workflow_tool.doActionFor( AtTheRootLevel, 'publish' )

Get the content type object and disallow it globally: 
>>> Archive = getattr( portal_types, 'Archive' )
>>> Archive.global_allow = False 

Remove the object created at the portal root from the main navbar
>>> actions = portal.portal_actions
>>> AtTheRootLevelTab = actions.AtTheRootLevel
>>> AtTheRootLevelTab.setExcludeFromNav( True )
>>> AtTheRootLevelTab.reindexObject()