work in progress: layout management

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2899 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-09-23 07:19:03 +00:00
parent 7d83c0dbeb
commit d4f355c2c9
7 changed files with 45 additions and 39 deletions

View file

@ -28,6 +28,9 @@ manager.
The layouts themselves are also specified as utilities. The layouts themselves are also specified as utilities.
>>> from cybertools.composer.layout.browser.default import page
>>> component.provideUtility(page, ILayout, name='page')
>>> from cybertools.composer.layout.browser.liquid.default import css >>> from cybertools.composer.layout.browser.liquid.default import css
>>> component.provideUtility(css, ILayout, name='css.liquid') >>> component.provideUtility(css, ILayout, name='css.liquid')

View file

@ -59,7 +59,8 @@ class Layout(Template):
title = description = u'' title = description = u''
category = 'default' category = 'default'
renderer = None renderer = None
order = 0 order = 50
sublayouts = None
def __init__(self, name, regionName, **kw): def __init__(self, name, regionName, **kw):
self.name = name self.name = name
@ -84,5 +85,6 @@ class LayoutInstance(object):
def getLayouts(self, region): def getLayouts(self, region):
if region is None: if region is None:
return [] return []
return region.layouts sublayouts = self.template.sublayouts
return [l for l in region.layouts
if sublayouts is None or l.name in sublayouts]

View file

@ -5,6 +5,11 @@
xmlns:browser="http://namespaces.zope.org/browser" xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="cybertools.composer"> i18n_domain="cybertools.composer">
<zope:utility
component="cybertools.composer.layout.browser.default.page"
provides="cybertools.composer.layout.interfaces.ILayout"
name="page" />
<zope:utility <zope:utility
component="cybertools.composer.layout.browser.default.logo" component="cybertools.composer.layout.browser.default.logo"
provides="cybertools.composer.layout.interfaces.ILayout" provides="cybertools.composer.layout.interfaces.ILayout"

View file

@ -25,11 +25,15 @@ $Id$
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from cybertools.composer.layout.base import Layout from cybertools.composer.layout.base import Layout
from cybertools.composer.layout.browser.standard import standardRenderers
defaultRenderers = ViewPageTemplateFile('default.pt').macros defaultRenderers = ViewPageTemplateFile('default.pt').macros
page = Layout('page', 'page', renderer=standardRenderers['page'],
sublayouts=set(['css.liquid', 'body.liquid']))
logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers['logo']) logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers['logo'])
top_actions = Layout('top_actions.default', 'body.top_actions', top_actions = Layout('top_actions.default', 'body.top_actions',

View file

@ -1,22 +0,0 @@
<metal:page define-macro="page"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
tal:define="body view/body">
<head metal:define-macro="head">
<title metal:define-macro="title"
tal:content="options/title|view/headTitle|context/title|default">
Powered by Zope 3
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<tal:css repeat="view view/layouts/css">
<metal:css use-macro="view/renderer" />
</tal:css>
<base href="." tal:attributes="href request/URL">
</head>
<body tal:replace="structure body" />
</html>
</metal:page>

View file

@ -1,3 +1,27 @@
<metal:page define-macro="page"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
tal:define="body view/body">
<head metal:define-macro="head">
<title metal:define-macro="title"
tal:content="options/title|view/headTitle|context/title|default">
Powered by Zope 3
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<tal:css repeat="view view/layouts/css">
<metal:css use-macro="view/renderer" />
</tal:css>
<base href="." tal:attributes="href request/URL">
</head>
<body tal:replace="structure body" />
</html>
</metal:page>
<metal:css define-macro="css" <metal:css define-macro="css"
tal:define="layout view/context/template"> tal:define="layout view/context/template">
<style type="text/css" media="all" <style type="text/css" media="all"

View file

@ -28,7 +28,8 @@ from zope.cachedescriptors.property import Lazy
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from cybertools.composer.layout.base import Layout from cybertools.composer.layout.base import Layout
from cybertools.composer.layout.interfaces import ILayoutManager, ILayoutInstance from cybertools.composer.layout.interfaces import ILayoutManager
from cybertools.composer.layout.interfaces import ILayout, ILayoutInstance
class BaseView(object): class BaseView(object):
@ -54,15 +55,14 @@ class BaseView(object):
class Page(BaseView): class Page(BaseView):
macroName = 'page' layoutName = 'page'
@Lazy @Lazy
def rootView(self): def rootView(self):
return self return self
def __call__(self): def __call__(self):
layout = Layout('page', 'page') layout = component.getUtility(ILayout, name=self.layoutName)
layout.renderer = ViewPageTemplateFile('main.pt').macros[self.macroName]
instance = ILayoutInstance(self.context) instance = ILayoutInstance(self.context)
instance.template = layout instance.template = layout
view = LayoutView(instance, self.request, name='page', view = LayoutView(instance, self.request, name='page',
@ -124,13 +124,3 @@ class ViewLayouts(object):
instance.view = v instance.view = v
subviews.append(v) subviews.append(v)
return subviews return subviews
class ViewResources(object):
def __init__(self, view):
self.view = view
def __getitem__(self, key):
# TODO...
return []