(Fwd) Re: [Zope] Equality test: if sequence-item = document id

Garry Steedman gs@styrax.com
Sat, 2 Jun 2001 17:09:05 +0000


Hello all,

one of my lovely colleagues got it working with the following code:

<dtml-let thisone=3Dmenu_sort_order>
<dtml-in "PARENTS[0].objectValues('DTML Document')">
<dtml-if "hasProperty('menu_sort_order')">
<dtml-if expr=3D"thisone=3D=3Dmenu_sort_order">
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;">[<dtml-var title>]</a>
<dtml-else>
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;"><dtml-var title></a>
</dtml-if>
<dtml-else>
</dtml-if>
</dtml-in>
</dtml-let>

many thanks to Tim for your suggestion: it pointed us in a direction 
which works, even if i don't really understand why! though it would 
seem to have something to do with strings versus integers 
(menu_sort_order being a property which accepts integer values...)

cheers,

Garry


------- Forwarded message follows -------
From:           	Garry Steedman <gs@styrax.com>
To:             	tim@freepm.org, michel@digicool.com, Max M=F8ller Rasmuss=
en <maxm@normik.dk>
Subject:        	Re: [Zope] Equality test: if sequence-item =3D document i=
d [excessive  recursion error]
Copies to:      	zope@zope.org
Send reply to:  	gs@styrax.com
Date sent:      	Sat, 2 Jun 2001 13:43:21 +0000

Tim,

thanks for the reply: i should have made myself clearer the first time
round: at first i thought it was just an issue of stringifying things
in order to compare them, but, once this is taken care of (as i
suspect it is now) this fscking recursion error takes over. which,
IINM means its a namespace problem.

one of the things which puzzles me is that when i use objectIds() (as
opposed to objectValues()), the recursion problem goes away, but i
can't call the title variable without getting an authentication
dialogue (which doesn't accept the admin pwd!) - now, i can get round
this by using the title_or_id variable, but this renders as the
title_or_id of the *current* document times the number of documents in
the list (instead of the title_or_id of each document)! this, again,
IINM, suggests a namespace problem.

i guess i must be missing something fairly obvious because i can't
believe i'm trying to do something particularly strange :(

Folder_X					[Folder]
  standard_x_header	[DTML Method]
  nav_stuff_l1		[DTML Method]
  nav_stuff_l2		[DTML Method]

  Folder_Y			[Folder]
    doc_1		[DTML Document]
    doc_2		[DTML Document]

standard_x_header includes
<dtml-var nav_stuff_l1>
<dtml-var nav_stuff_l2>

<nav_stuff_l1> is this:

<dtml-comment>
This method builds the 1st-level site navigation. It iterates through
Folder objects below the site root, sorts them by the property
"menu_sort_order" (which is an integer value starting at 0) and
renders the Folder title (this is important because we can't put
accents in the id) only if this property is present. The inside loop
tests whether the current folder is in the list of folders and if it
is it wraps square brackets around the title to highlight our current
position. </dtml-comment>

<DIV CLASS=3Dnavigation VALIGN=3D"top">
<dtml-in "Folder_X.objectValues('Folder')" sort=3Dmenu_sort_order>
<dtml-if "hasProperty('menu_sort_order')">
<dtml-if "this()=3D=3DPARENTS[0]">
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;">[<dtml-var title>]</a>
<dtml-else>
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;"><dtml-var title></a>
</dtml-if>
<dtml-else>
</dtml-if>
</dtml-in>
</DIV>

<nav_stuff_l2> is this:

<dtml-comment>
This method builds the 2nd-level site navigation. It grabs the Folder
of the current DTML Document [index_html] and iterates through the
DTML Document objects inside it, rendering the document titles
(because of accents, we don't want to render the document id) sorted
by the menu_sort_order property. The inside loop tests the current
document id against the list of document ids in the folder and wraps
square brackets around the title to highlight the current document.
</dtml-comment>

<DIV CLASS=3Dnavigation VALIGN=3D"top">
<dtml-let this_id=3Did>
<dtml-in "PARENTS[0].objectValues('DTML Document')" 
sort=3Dmenu_sort_order>
<dtml-if "hasProperty('menu_sort_order')">
<dtml-if expr=3D"_['sequence-item'].getId()=3D=3Dthis_id">
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;">[<dtml-var title>]</a>
<dtml-else>
</dtml-if>
&nbsp;&nbsp;<a href=3D"&dtml-absolute_url;"><dtml-var title></a>
<dtml-else>
</dtml-if>
</dtml-in>
</dtml-let>
</DIV>

NB: <dtml-if expr=3D"_['sequence-item'].getId()=3D=3Dthis_id">
                                   ^^^^^^^
added as per Michel Pelletier's suggestion.

where the excessive recursion comes from i have no idea! :(

cheers,

Garry




On 1 Jun 2001, at 13:53, Tim Cook wrote:

From:           	Tim Cook <twcook@iswt.com>
Send reply to:  	tim@freepm.org
Organization:   	Free Practice Management, Inc.
To:             	gs@styrax.com
Copies to:      	zope@zope.org
Subject:        	Re: [Zope] Equality test: if sequence-item =3D document
id [excessive 
 recursion error]
Date sent:      	Fri, 01 Jun 2001 13:53:05 -0500

> Garry Steedman wrote:
> 
> > btw: am i completely stupid to think that the dtml-let will assign
> > the id of the dtml method which contains it ( e.g. this_id =3D
> > nav_stuff.id )?
> > 
> 
> I'm not sure I understood 'what' you were attempting to
> accomplish so my example may be way off base.
> 
> I may have ass-u-me d what you meant? :-(
> 
> I'll try to take a look at it later when I have some time, if you do
> not get a fix before then.
> 
> -- 
> Tim Cook, President - FreePM,Inc. 
> http://www.FreePM.com Office: (731) 884-4126
> ONLINE DEMO: http://www.freepm.org:8080/FreePM
> 
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists - 
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )


------- End of forwarded message -------
+-------------------------------------------+
  Garry Steedman      mailto:gs@styrax.com  
  Styrax Associates  http://www.styrax.com/ 

  "The Good Man has no shape."            
+-------------------------------------------+