Hi!

Jean-Marc Orliaguet schrieb:
Anyway, pagelets or portlets whatever they called and no matter what
data they produce (structured data or raw HTML) must be "pipe-able"
through the rendering engine, i.e. they must return some data, the more
"ready HTML" the data is the less reusable it will be.


Pipe-able, hmm. I think, *if* we could do define-slot and fill-slot stuff in Python code that would be very nice. We would have a "page" object that can "pipe" page components together.

A simple example with boxes (sorry, Zope 2 script, don't kill me):

##
page = context.Page(template=container.ZPT_A)

# aggregate macro-defs from other page template
page.macros.update(container.ZPT_B.macros)

# create list of Box instances (not rendered HTML)
b1 = container.box_a('demo', 'Demo', condition=some_condition)
# box 2 takes b1 as input
b2 = container.box_b('foo', 'Foo', some_arg=b1)

left_boxes = [b1, b2]

# make boxes available in PTs as 'lboxes'
page.lboxes = left_boxes

# now we have aggregated all informations
# ready to render

# calls pt_render of ZPT_A with extra context
return page.render()

##

ZPT_A:

<page>
  <body metal:use-macro="macros/body"/>
</page>

ZPT_B:

<body metal:define-macro="body">
  <!-- render boxes here -->
  <box metal:use-macro="macros/box_repeat"/>
</body>

box_repeat macro:

<div class="box"
     metal:define-macro="box_repeat"
     tal:repeat="box lboxes"
     tal:attributes="id box/id">
  <h1 class="box-header"
      tal:content="box/title"/>
  <div class="box-body"
       metal:use-macro="box/macros/body|default"/>
</div>

Just for your inspiration.

Tonico

_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to