[Zope] reverse sort (with patch)
Martijn Pieters
mj@antraciet.nl
Mon, 17 May 1999 12:41:53 +0200
At 18:27 12/05/99 , benjamin.ryzman@easynet.fr wrote:
>Hello from a new Zope user!
>
>I'm currently playing with the idea of implementing a sort of Slashdot
>community in Zope. I've just started DTML scripting and External methods
>but my experience with python is limited.
>
>I'd like to get a sequence of the DTML Documents in the current Folder
>*reverse* sorted by an attribute. Is there an easier way to do it than to
>write an External Method. I find it difficult to believe that the "in" tag
>gets a "sort" attribute but not an "rsort". Also I cannot use the python
>reverse() method in an expr since this method reverses in place (and thus
>returns None).
>
>What I was going to do was:
><!--#in expr="objectValues('DTML Document').reverse()" sort=entered_date-->
>...
><!--#/in-->
>which doesn't work.
With the following patch applied to lib/python/DocumentTemplate/DT_in.py
406a407,408
>
> reverse=None
413c415
< previous=1, next=1, expr='', sort='')
---
> previous=1, next=1, expr='', sort='', reverse=1)
419a422,423
>
> if has_key('reverse'): self.reverse=args['reverse']
484a489
> if self.reverse is not None: sequence.reverse()
635a641
> if self.reverse is not None: sequence.reverse()
This diff works on both Zope 1.10.2 and 1.11.0pr1
You can then use the following DTML:
><!--#in expr="objectValues('DTML Document')" sort=entered_date reverse-->
>...
><!--#/in-->
It basically adds a new attribute to the #in tag, called 'reverse'. If
present, the sequence will be reversed, wether it is sorted or not. This
way it is also usable on sequences that have been sorted already.
--
Martijn Pieters, Web Developer
| Antraciet http://www.antraciet.nl
| Tel: +31-35-6254545 Fax: +31-35-6254555
| mailto:mj@antraciet.nl http://www.antraciet.nl/~mj
| PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149
------------------------------------------