Get it at: http://www.zope.org/Download/Contrib/Zieve.tgz from the README: Zieve 0-0-1 Zieve is a (beta) Z-subclassable class that assists in sorting ZClasses in various ways. To use Zieve... unpack the tgz file in the zope home folder. Then start Zope and create a ZClass with Zieve as a base class. Then put an instance of this ZClass where you can reach it from your folders of other ZClasses. Here is some DTML from a DTMLMethod that uses a zclass derived from Zieve to do some sorting... This displays a table heading with links that dynamically resort the table according to which link was clicked last. The secondary, tertiary, ...etc keys are remembered from prior clicks.... ---------------------------------------------------------------------- <!--#var standard_html_header--> <h2><!--#var title_or_id--></h2> <br> <!-- 'theZieve' is an instance of a ZClass that is subclassed from Zieve. 'name', 'color', 'birthsone', 'number' are all properties of the ZClass. The format 'name:format' allows you to specify a type or filter to use before comparison. --> <!--#in "theZieve.sortObjects( objectValues(['mySortableClass']), REQUEST, RESPONSE, defaultKeys=['name','color','birthstone','number:int'])"--> <!--#if sequence-start--> <center><table> <tr> <td><a href="theZieve/setSortPrimary?key=name">name</a></td> <td><a href="theZieve/setSortPrimary?key=color">color</a></td> <td><a href="theZieve/setSortPrimary?key=birthstone">birthstone</a></td> <td><a href="theZieve/setSortPrimary?key=number:int">number</a></td> </tr> <!--#/if--> <!--#with sequence-item--> <tr> <td><!--#var name--></td> <td><!--#var color--></td> <td><!--#var birthstone--></td> <td><!--#var number--></td> </tr> <!--#/with--> <!--#if sequence-end--> </table></center> <!--#/if--> <!--#else--> Sorry.. there are no objects to sort.. <!--#/in--> <!--#var standard_html_footer--> ---------------------------------------------------------------------- steve@spvi.com