[Zope] Re: yadtp (yet another dtml-tree problem)
Dieter Maurer
dieter@handshake.de
Fri, 2 Aug 2002 21:18:46 +0200
Werner Fabian writes:
> I posted a problem that I am having with the dtml-tree tag in the
> zope@zope.org -list and in the "Zope-Forum", unluckily without getting an
> y
> replies.
Please stay on the list!
> ...
> In the root folder there is a dtml-method called "show-tree" which does
> essentially this:
>
>
> <dtml-tree expr="REQUEST.PARENTS[uplevel]"
> skip_unauthorized=1
> branches_expr="objectValues(['Folder','File','DTML
> Method','DTML Document'])">
>
> <a href="<dtml-var absolute_url>"> <dtml-var title_or_id>
> </a>
>
> </dtml-tree>
>
>
> This method is called from the "start folder" in essentially the followin
> g way
> (index, e.g.):
>
>
> <dtml-var standard_html_header>
>
> <dtml-unless uplevel> <dtml-call "REQUEST.set('uplevel' , 0)"></dtml-u
> nless>
>
> <dtml-call "REQUEST.set('uplevel', _.int(uplevel))">
> <dtml-call "REQUEST.set('uplevelp', uplevel+1)">
>
> <a href="<dtml-var URL0>?uplevel=<dtml-var uplevelp>">Up</a>
> <dtml-var show_tree>
>
> <dtml-var standard_html_footer>
>
>
> This works OK.
> However, if - after having pushed up the tree-root by some levels - I wan
> t to
> expand or collapse one of the branches by using the +/- - icons, the tree
> is
> displayed with "start folder" as tree-root again, instead of the folder w
> here
> I tried to expand/collapse the branch.
>
> How do I avoid this?
I am almost sure that *I* replied to your question in the list!
Your problem is that the links for "expand/collapse" do not
contain your "uplevel".
Someone invented the "urlparam" attribute, but he did not think
enough. In almost all cases, the parameter to extend the
"expand/collapse" URL is not constant but an expression (as in your
case).
Your options:
* search for the "urlparam_expr" patch someone donated
to fix precisely this bad design. Unfortunately, the patch did not
make it in the Zope core.
* use a cookie to pass your "uplevel" around
This is not nice but you need not to patch Zope code.
It is this, what I do in my DocFinder product (for
a similar purpose to yours).
Dieter