cybertools/composer/layout
helmutm f58b622ddd provide RendererFactory class that allows transparent dynamic retrieval of macros
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2905 fd906abe-77d9-0310-91a1-e0d9ade77398
2008-09-24 11:35:10 +00:00
..
browser provide RendererFactory class that allows transparent dynamic retrieval of macros 2008-09-24 11:35:10 +00:00
__init__.py created composer.layout package 2008-07-15 11:53:56 +00:00
base.py work in progress: layout management 2008-09-23 07:19:03 +00:00
configure.zcml work in progress: layout management - first working page with CSS 2008-09-20 08:45:15 +00:00
interfaces.py work in progress: layout management - first working page with CSS 2008-09-20 08:45:15 +00:00
README.txt work in progress: layout management 2008-09-23 07:19:03 +00:00
region.py work in progress: layout management - first working page with CSS 2008-09-20 08:45:15 +00:00
tests.py created composer.layout package 2008-07-15 11:53:56 +00:00

=================
Layout Management
=================

  ($Id$)

Let's start with some basic setup; the traversable adapter is needed for
rendering the page templates.

  >>> from zope import component
  >>> from zope.interface import Interface
  >>> from zope.traversing.adapters import DefaultTraversable
  >>> component.provideAdapter(DefaultTraversable, (Interface,))

For testing we define a simple content class.

  >>> class Document(object):
  ...     text = ''

The layout management is controlled by a global utility, the layout
manager.

  >>> from cybertools.composer.layout.base import LayoutManager, LayoutInstance
  >>> from cybertools.composer.layout.interfaces import ILayout

  >>> manager = LayoutManager()
  >>> component.provideUtility(manager)

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
  >>> 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')

In addition we have to provide at least one layout instance adapter that
connects a layout with the client object.

  >>> component.provideAdapter(LayoutInstance, (object,))


Browser Views
=============

  >>> from cybertools.composer.layout.browser.view import Page
  >>> from zope.publisher.browser import TestRequest

  >>> page = Page(Document(), TestRequest())

  >>> page()
  u'<!DOCTYPE ...>...<html ...>...</html>...'