================= 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 that are automatically registered when we import the modules they are defined in. >>> 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. >>> 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'.........'