Nikko Wolf wrote:
Ian Bicking wrote:

I'm surprised this has never come up for me before, but now I want to render a recursive data structure and I'm at a loss how I might do that in ZPT. Or, what the best workaround would be. E.g.:

['a', 'b', ['c', ['d', 'e']]]

Becomes:

<ul>
 <li>a</li>
 <li>b</li>
 <ul>
  <li>c</li>
  <ul>
   <li>d</li>
   <li>e</li>
  </ul>
 </ul>
</ul>

I've made recursive macros before. It's not so different from other recursion techniques. Here's one to render a site tree::

 <html>
   <head>
     <title tal:content="template/title">The title</title>
   </head>
   <body>
     Site structure:

   <tal:contain define="location nocall:here">
    <div metal:use-macro="template/macros/list" />
   </tal:contain>

   </body>
 </html>

 <tal:hidemacro replace="nothing">
 <metal:recurse define-macro="list">
   <ul>
     <li tal:repeat="elt location/objectValues">
       <span tal:content="elt/getId">objectId</span>
       <metal:block tal:condition="elt/isPrincipiaFolderish"
                    tal:define="location nocall:elt">
           <div metal:use-macro="template/macros/list" />
       </metal:recurse>
     </li>
   </ul>
 </metal:recurse>
 </tal:hidemacro>

It will go from 'context', of course, unless you were to change the definition of 'location' in the page.

You can imagine how this would work with a nested list: you just have to have ways of checking containership and getting contents.

                --jcc

--
"Building Websites with Plone"
http://plonebook.packtpub.com/

Enfold Systems, LLC
http://www.enfoldsystems.com
_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to