Waking up to the reality of SEO and social media, large corporate organizations are now looking to better control content on their long list of child sites, as well as prevent strategic information from evading to third-party sites such as LinkedIn, Facebook, Twitter, etc.
One forward-thinking school – College of Engineering at University of Notre Dame – has set the ball rolling by implementing a large hub and spoke infrastructure to manage the content of a dozen departments and a dozen research centers. The new structure was unveiled in January 2012 and is powered by Plone.
In this talk, we will unveil how the Plone add-on Lineage can be used to create a powerful structure of parent and child sites. First, we will explain how Lineage works out of the box with no customizations. The default behavior is simple and allows for the new microsites to be created instantly, but they will look the same as their parent.
After reviewing the stock behavior, we will explore how to extend Lineage. There are several Lineage add-ons that allow child sites to have their own theme or even their own properties. We will present what these add-ons provide on top of the out-of-the box experience. We will also reveal how to use the child site creation hooks to populate the new child sites with content, set up properties and prepare the child site for use by the end users.
18. lineage.index PLONE CONFERENCE 2012
# Search for items from subsite1
>>> brains = portal_catalog(childsite='subsite1')
>>> brains[0].childsite
'subsite1'
# Search for items from the actual plone site root
>>> brains = portal_catalog(childsite=None)
>>> brains[0].childsite is None
True
19. lineage.registry PLONE CONFERENCE 2012
• Local registry settings
• Proxy to the registry above
20. lineage.proxyprops PLONE CONFERENCE 2012
• Terrible code
• But it works...
28. Creation event PLONE CONFERENCE 2012
from plone import api
def create_conference(event):
"""Create the content for the new conference child site
"""
child_site = event.object
# Don't show this site in the nav
child_site.setExcludeFromNav(True)
# Make sure the setting gets indexed so that nav shows correctly
child_site.reindexObject()
# Create the default content
api.content.create(
type='Folder', title='Talks', container=child_site, id='talks')
api.content.create(
type='Folder', title='Speakers', container=child_site, id='speakers')
api.content.create(
type='Folder', title='About', container=child_site, id='about')