Roché Compaan wrote:
I want to use a recursive method do draw the navigation tree for my site. I do not want to use the tree tag to iterate through the subfolders because the question-mark in the tree-query might obscure pages of the site to search engines. How can one call a method from within a method passing variables to that method? How does one define a method which accepts certain parameters eg.
if someone can translate this in to dtml for me this would be a great help:
recursive-dmtl-method(variable folder) in folder if document then makeHREF to document
if folder.hassubfolders then recursive-dtml-method(folder) --------------------------------------
This would be of great help.
Here is a similar question I answered several weeks ago:
Subject: RE: [Zope] another beginners question about dtml Date: Fri, 2 Jul 1999 17:42:28 -0400 From: Michel Pelletier <michel@digicool.com> To: "'Lauri Posti'" <lauri@linnet.ee>, zope@zope.org
-----Original Message----- From: Lauri Posti [mailto:lauri@linnet.ee] Sent: Friday, July 02, 1999 3:53 PM To: zope@zope.org Subject: [Zope] another beginners question about dtml
hi,
the question is: how to determine the number of elements in list? in my case nubmer of elements in PARENTS[] .
<!--#var "_.len(PARENTS}"-->
the problem is: create list of subfolder of folder and it subfolders if there are some.
or can anyone give better solution than using PARENTS? the current code is:
Create a method that lists the subfolders in this folder, and, if there is a method of a certain name in a subfolder, call it.
The trick is, the 'method of a certain name' is the SAME method as the one you create. This is an extremely tricky acquisition/recursion trick. To do this trick, create two DTML methods in your top level folder, 'start' and 'voodoo'.
DTML Method 'start':
<!--#var standard_html_header--> <!--#var voodoo--> <!--#var standard_html_footer-->
DTML Method 'voodoo':
<!--#in "objectValues('Folder')"--> <!--#var id--> <a href="<!--#var absolute_url-->"><!--#var absolute_url--></a><br> <!--#var voodoo--><br> <!--#/in-->
Notice that the voodoo method calls itself. Thus, the voodoo method will call the voodoo method in every subfolder it finds, which in turn calls the voodoo method on it's subfolders.... etc. until 'objectValues' returns no more subfolders. Classic recursion.
Where the voodoo comes in is that the method 'voodoo' does NOT have to be in every single folder on the site. All of the subfolders, and their subfolders, *acquire* the method from 'above' them. Thus, recursion and acquisition are used together, one to travel down the objects to recursivly call itself, the other to travel up to objects to find itself so it can call itself recursively, and when you mix the two together, you get a much simpler solution (but not a very gramaticaly sane sentence, try it, it will work for you).
Welcome to the Zen of Zope. ;)
-Michel
<!--#in "PARENTS[-3].objectValues(['Folder'])"--> <td <!--#if "PARENTS[-4].id==id"--> bgcolor=#034F6B <!--#/if--> nowrap=1 width=7% align=center valign=center><b> <font face="helvetica" size=2> <a href=/etf/ee/<!--#var id--> style="text-decoration: none" ><font color=#ffffff><!--#var title_or_id--> </font></a> </font></b></td> <!--#/in-->
thanks,
Lauri Posti
_______________________________________________ Zope maillist - Zope@zope.org http://www.zope.org/mailman/listinfo/zope
(For developer-specific issues, use the companion list, zope-dev@zope.org - http://www.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://www.zope.org/mailman/listinfo/zope
(For developer-specific issues, use the companion list, zope-dev@zope.org - http://www.zope.org/mailman/listinfo/zope-dev )
Roché
_______________________________________________ Zope maillist - Zope@zope.org http://www.zope.org/mailman/listinfo/zope
(To receive general Zope announcements, see: http://www.zope.org/mailman/listinfo/zope-announce
For developer-specific issues, zope-dev@zope.org - http://www.zope.org/mailman/listinfo/zope-dev )