[Zope] dynamic navigation menu: comparing context to container

Mark McEahern marklists@mceahern.com
Thu, 1 Aug 2002 13:07:23 -0500


Hi, I have a Python script called select_this() that is supposed to return a
boolean indicating whether the current item should be highlighted or not,
depending on whether the current context is on that item's path.  (One
problem I may have in asking my question is I may not be using the correct
terminology, so I invite any rewording that would make this more clear.  I'm
relatively new to Zope.)

The problem is that it always returns 0 (False), so I think my problem is
that I don't understand what context and container are--or how to compare
them.

Here's what the script looks like:

# Return boolean indicating whether the specified item should be
# displayed as selected.

current = context

while 1:
  if current == container:
    break
  if item == current:
    return 1
  current = current.getParentNode()

return 0

Here's the snippet of a ZPT page template where I'm trying to use
select_this() to build the top-level of a dynamic navigation menu using the
OrderedFolder objects within a content OrderedFolder:

    <span tal:omit-tag=""
          tal:repeat="section
python:container.content.objectValues(['Ordered Folder'])">
      <td tal:attributes="class python:test(container.select_this(section),
'tab_select', 'tab_unselect')"
          width="120" height="24">
        <a tal:content="section/title_or_id"
           tal:attributes="href python:'/%s/content/%s' %
(container.getId(), section.getId())"
           class="tab"></a>
      </td>
    </span>

The structure of the site looks like this:

  /Root
    /navtest (Folder)
      /content (OrderedFolder)
        /a (OrderedFolder)
        /b (OrderedFolder)
        /c (OrderedFolder)
      select_this (Python Script)

No matter where I navigate, all three top-level folders are shown with the
style tab_unselect.  If I navigate to, e.g.,

  http://localhost:8080/navtest/content/a/

I expect that navigation item to have the class tab_select.

I appreciate any and all feedback and help.

Thanks,

// mark