On Tue, 09 Nov 1999 00:53:36 -0700, Adrian Esteban Madrid wrote:
I want to have two different menues: one with the Folders in the current folder and another with the DTML Documents again in the current folder.
Here is my cut at the project. Instead of explicitly searching for meta_type 'Folder' and 'DTML Document', I used the 'isPrincipiaFolderish' method to distinguish. This allows things like ZCatalogs and such to count as folders, since they -can- contain things like folders. <dtml-call "REQUEST.set('fobjs', [])"> <!-- Folder Objects --> <dtml-call "REQUEST.set('dobjs', [])"> <!-- Document Objects --> <dtml-in "PARENTS[0].objectValues()"> <dtml-let item="_.getitem('sequence-item', 0)"> <!-- we want ref to obj, _not_ rendered form --> <dtml-if "item.isPrincipiaFolderish"> <dtml-call "fobjs.insert(0, item)"> <dtml-else> <dtml-call "dobjs.insert(0, item)"> </dtml-if> </dtml-let> <dtml-else> No Objects Found </dtml-in> Found <dtml-var "_.len(fobjs)"> folders and <dtml-var "_.len(dobjs)"> documents. <BR> <dtml-in fobjs> Folder <dtml-var "_.getitem('sequence-item', 0).id"> <BR> </dtml-in> <!-- The following is tricky because if you just reference 'id', for some types of objects it is a method and for others, it is a string. You would have to test for isCallable or arrange for Zope to do that call for you, hence the dtml-with wrapper I use. --> <dtml-in dobjs> <dtml-with "_.getitem('sequence-item', 0)"> <!-- we want ref to obj, _not_ rendered form --> Document <dtml-var id> <BR> </dtml-with> </dtml-in>
This works just great for the first objetive. Unfortunately, I try doing the same thing for a second time only with 'DTML Document' but it just loops forever (a Python thread uses up 99% of the CPU). I don't know.
When playing with your example, I saw this behavior too. It seems to be the extra evaluation of the doc objects, which is avoided by using .getitem(aname, 0). -Jeff Rush