Share content across subsites in Plone: cultact.subsite

Post on 05-Jul-2015

333 views 0 download

description

Presentation at Plone Open Garden 2014 for the cultact.subsite content syndication toolkit. See source code + README at https://github.com/cosent/cultact.subsite

transcript

cultact.subsite

Guido Stevensguido.stevens@cosent.nl

www.cosent.nlSocial Knowledge Technology

Sharing Content between subsites

Twin Sites

Shared Content

URL rewrites

# shared user folders

rewrite ^/profielen/$ /profielen permanent;

rewrite ^/profielen(.*) /VirtualHostBase/http/$server_name:80/ka/VirtualHostRoot/profielen$1 last;

# livesearch all content

rewrite ^/livesearch(.*) /VirtualHostBase/http/$server_name:80/ka/VirtualHostRoot/livesearch$1 last;

# serve subsite

rewrite ^/(.*) /VirtualHostBase/http/$server_name:80/ka/maastricht/VirtualHostRoot/$1 last;

cultact.subsite

● request marking

● content containers

● assignment behavior

● catalog & collections

● canonical URL SEO

Request Marking

● Inspired by plone.theme

● before_traverse hook maps request SERVERNAME to subsite

● request.set('in_subsite', chosen)

● Marks request with subsite-specific browser layer

So?● body class=”subsite_maastricht” CSS and Diazo rules

● Full custom theme registered for subsite layer possible

<drop css:theme=".only-subsite-maastricht" css:if-not-content="body.subsite-maastricht" />

Content Containers

● dexterity.container

● Inspired by Lineage

● INavigationRoot

● ISite

● Very little content here

– subsite-local advertisements

– subsite-local contact info

Assignment Behavior

● Dexterity behavior to map shared content to subsites

● subsite_home

– “main” subsite

– single choice

● subsite_syndication

– “default visible in” subsites

– multi choice

● Used to power browser query logic

– default: request.in_subsite in context.subsite_syndication

– other: request.in_subsite != context.subsite_home

Catalog & Collections

● Catalog indexes

– subsite_home

– subsite_syndication

● Collection criteria

– subsite_home

– subsite_syndication

● MultisiteCollection behavior

– override Collection to not force INavigationRoot path query

Misc Overrides

● override plone.app.layout.links.viewlets.CanonicalURL

– point to “home” subsite virtual URL for shared content

● override Products.Doormat viewlet

– show correct footer on shared content

– uses request marker to retrieve “right” Doormat

● Need to override search in your own custom code

Sharing Content between subsites

cultact.subsite

Guido Stevensguido.stevens@cosent.nl

www.cosent.nlSocial Knowledge Technology

Sharing Content between subsites

Twin Sites

Shared Content

URL rewrites

# shared user folders

rewrite ^/profielen/$ /profielen permanent;

rewrite ^/profielen(.*) /VirtualHostBase/http/$server_name:80/ka/VirtualHostRoot/profielen$1 last;

# livesearch all content

rewrite ^/livesearch(.*) /VirtualHostBase/http/$server_name:80/ka/VirtualHostRoot/livesearch$1 last;

# serve subsite

rewrite ^/(.*) /VirtualHostBase/http/$server_name:80/ka/maastricht/VirtualHostRoot/$1 last;

cultact.subsite

● request marking

● content containers

● assignment behavior

● catalog & collections

● canonical URL SEO

Request Marking

● Inspired by plone.theme

● before_traverse hook maps request SERVERNAME to subsite

● request.set('in_subsite', chosen)

● Marks request with subsite-specific browser layer

So?● body class=”subsite_maastricht” CSS and Diazo rules

● Full custom theme registered for subsite layer possible

<drop css:theme=".only-subsite-maastricht" css:if-not-content="body.subsite-maastricht" />

Content Containers

● dexterity.container

● Inspired by Lineage

● INavigationRoot

● ISite

● Very little content here

– subsite-local advertisements

– subsite-local contact info

Assignment Behavior

● Dexterity behavior to map shared content to subsites

● subsite_home

– “main” subsite

– single choice

● subsite_syndication

– “default visible in” subsites

– multi choice

● Used to power browser query logic

– default: request.in_subsite in context.subsite_syndication

– other: request.in_subsite != context.subsite_home

Catalog & Collections

● Catalog indexes

– subsite_home

– subsite_syndication

● Collection criteria

– subsite_home

– subsite_syndication

● MultisiteCollection behavior

– override Collection to not force INavigationRoot path query

Misc Overrides

● override plone.app.layout.links.viewlets.CanonicalURL

– point to “home” subsite virtual URL for shared content

● override Products.Doormat viewlet

– show correct footer on shared content

– uses request marker to retrieve “right” Doormat

● Need to override search in your own custom code

Sharing Content between subsites