share content across subsites in plone: cultact.subsite
DESCRIPTION
Presentation at Plone Open Garden 2014 for the cultact.subsite content syndication toolkit. See source code + README at https://github.com/cosent/cultact.subsiteTRANSCRIPT
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
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