got this all working now:
response.ttt =
db((db.page.showinmenu==1)&(db.page.active==1)).select(db.page.id,
db.page.menutext, db.page.pageurl, db.page.parent,
orderby=db.page.parent|db.page.sort|db.page.menutext)
response.tttmenu = [dict(),dict()]
for subpage in response.ttt:
response.tttmenu[0][str(subpage.id)] = [subpage.menutext,
subpage.pageurl, subpage.parent]
if str(subpage.parent) in response.tttmenu[1]:
response.tttmenu[1][str(subpage.parent)].append(subpage.id)
else:
response.tttmenu[1][str(subpage.parent)] = [subpage.id]
def buildmenu(parent, menu):
html = []
if menu[1][str(parent)]:
for itemid in menu[1][str(parent)]:
if str(itemid) in menu[1]:
#children
pageurlarg=str(menu[0][str(itemid)][1])
html.append((str(menu[0][str(itemid)][0]), False,
URL('aptcms', 'pages', 'index', args=pageurlarg.split("/")),
buildmenu(itemid, menu)))
else:
#no children
pageurlarg=str(menu[0][str(itemid)][1])
html.append((str(menu[0][str(itemid)][0]), False,
URL('aptcms', 'pages', 'index', args=pageurlarg.split("/"))))
return html
response.menu = buildmenu(0, response.tttmenu)