let layouts register themselves automatically as utilities upon creation

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3063 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-12-15 16:07:35 +00:00
parent ff0078630a
commit 16d43f6f81
5 changed files with 21 additions and 84 deletions

View file

@ -26,34 +26,11 @@ manager.
>>> manager = LayoutManager()
>>> component.provideUtility(manager)
The layouts themselves are also specified as utilities.
The layouts themselves are also specified as utilities that are automatically
registered when we import the modules they are defined in.
>>> from cybertools.composer.layout.browser.default import page
>>> component.provideUtility(page, ILayout, name='page')
>>> from cybertools.composer.layout.browser.liquid.default import css
>>> component.provideUtility(css, ILayout, name='css.liquid')
>>> from cybertools.composer.layout.browser.liquid.default import body
>>> component.provideUtility(body, ILayout, name='body.liquid')
>>> from cybertools.composer.layout.browser.default import logo
>>> component.provideUtility(logo, ILayout, name='logo.default')
>>> from cybertools.composer.layout.browser.default import top_actions
>>> component.provideUtility(top_actions, ILayout, name='top_actions.default')
>>> from cybertools.composer.layout.browser.default import column1
>>> component.provideUtility(column1, ILayout, name='column1.default')
>>> from cybertools.composer.layout.browser.default import content
>>> component.provideUtility(content, ILayout, name='content.default')
>>> from cybertools.composer.layout.browser.default import column2
>>> component.provideUtility(column2, ILayout, name='column2.default')
>>> from cybertools.composer.layout.browser.default import footer
>>> component.provideUtility(footer, ILayout, name='footer.default')
>>> from cybertools.composer.layout.browser import default
>>> from cybertools.composer.layout.browser.liquid import default
In addition we have to provide at least one layout instance adapter that
connects a layout with the client object.

View file

@ -70,12 +70,12 @@ class Layout(Template):
self.regionName = regionName
for k, v in kw.items():
setattr(self, k, v)
#self.register()
self.register()
def register(self):
existing = component.queryUtility(ILayout, name=self.name)
if existing:
raise ValueError('Layout %s has already been registered.' % self.name)
raise ValueError("Layout '%s' has already been registered." % self.name)
component.provideUtility(self, provides=ILayout, name=self.name)

View file

@ -7,42 +7,11 @@
<browser:resourceDirectory name="default" directory="resources" />
<!-- main layouts -->
<!-- layouts -->
<zope:utility
component="cybertools.composer.layout.browser.default.page"
provides="cybertools.composer.layout.interfaces.ILayout"
name="page" />
<zope:module module="cybertools.composer.layout.browser.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.logo"
provides="cybertools.composer.layout.interfaces.ILayout"
name="logo.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.top_actions"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column2.top_actions" />
<zope:utility
component="cybertools.composer.layout.browser.default.column1"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column1.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.content"
provides="cybertools.composer.layout.interfaces.ILayout"
name="content.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.column2"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column2.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.footer"
provides="cybertools.composer.layout.interfaces.ILayout"
name="footer.default" />
<!-- skin-specific layouts -->
<include package=".liquid" />

View file

@ -32,22 +32,19 @@ from cybertools.composer.layout.browser.standard import standardRenderers
defaultRenderers = RendererFactory(ViewPageTemplateFile('default.pt'))
page = Layout('page', 'page', renderer=standardRenderers['page'],
Layout('page', 'page', renderer=standardRenderers['page'],
sublayouts=set(['css.liquid', 'body.liquid']),
favicon='default/favicon.png')
logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers.logo)
Layout('logo.default', 'body.logo', renderer=defaultRenderers.logo)
top_actions = Layout('top_actions.default', 'body.top_actions',
Layout('top_actions.default', 'body.top_actions',
renderer=defaultRenderers.top_actions)
column1 = Layout('column1.default', 'body.column1',
renderer=defaultRenderers.column1)
Layout('column1.default', 'body.column1', renderer=defaultRenderers.column1)
content = Layout('content.default', 'body.content',
renderer=defaultRenderers.content)
Layout('content.default', 'body.content', renderer=defaultRenderers.content)
column2 = Layout('column2.default', 'body.column2',
renderer=defaultRenderers.column2)
Layout('column2.default', 'body.column2', renderer=defaultRenderers.column2)
footer = Layout('footer.default', 'body.footer', renderer=defaultRenderers.footer)
Layout('footer.default', 'body.footer', renderer=defaultRenderers.footer)

View file

@ -8,14 +8,8 @@
<browser:resource
name="liquid.css" file="base.css" />
<zope:utility
component="cybertools.composer.layout.browser.liquid.default.css"
provides="cybertools.composer.layout.interfaces.ILayout"
name="css.liquid" />
<!-- layouts -->
<zope:utility
component="cybertools.composer.layout.browser.liquid.default.body"
provides="cybertools.composer.layout.interfaces.ILayout"
name="body.liquid" />
<zope:module module="cybertools.composer.layout.browser.liquid.default" />
</configure>