In menu.py I have the following code:
response.cms_menu = [['Home',request.controller=='cms' and
request.function=='index',URL('cms','index')]]
def adjustCmsMenu():
if session.cmsadmin_menu:
response.cms_menu.append(['Admin',request.controller=='cmsadmin',URL('cmsadmin','router')])
if session.cmsnode_menu:
response.cms_menu.append(['Basis',request.controller=='cmsnode',URL('cmsnode','index')])
if session.cmssite_menu:
response.cms_menu.append(['Site',request.controller=='cmssite',URL('cmssite','index')])
if session.cmsabout_menu:
response.cms_menu.append(['About',request.controller=='cmsabout',URL('cmsabout','index')])
if session.cmscalendar_menu:
response.cms_menu.append(['Calendar',request.controller=='cmscalendar',URL('cmscalendar','index')])
In a controller outside any function I have the following code:
session.cmsadmin_menu=True
adjustCmsMenu()
In a function called router I have:
@auth.requires(lambda: auth.has_membership(ADMIN))
def router():
session.authnodeID=session.authnodename=session.vcardsettings=session.sitesettings=\
session.aboutsettings=session.calendarsettings=[]
session.cmsnode_menu=session.cmssite_menu=session.cmsabout_menu=session.cmscalendar_menu=False
if not len(request.args):
redirect(URL('cmsadmin','index'))
elif len(request.args) or session.authnodeID!=request.args(0):
session.authnodeID=request.args(0)
row=db(db.Node.id==request.args(0)).select(db.Organization.name,\
left=db.Organization.on(db.Node.id==db.Organization.nodeID)).first()
if row.name:
session.authnodename=row.name
session.cmsnode_menu=True
url=URL('cmsnode','index')
rows=db((db.auth_user.nodeID==session.authnodeID)&(db.auth_user.id==db.auth_membership.user_id))\
.select(db.auth_membership.group_id)
if rows:
for r in rows:
if r.group_id==VCARDGROUPID:
session.cmssite_menu=True
setVCardSettings()
if r.group_id==SITEGROUPID:
session.cmssite_menu=True
setSiteSettings()
if r.group_id==ABOUTGROUPID:
session.cmsabout_menu=True
setAboutSettings()
if r.group_id==CALENDARGROUPID:
session.cmscalendar_menu=True
setCalendarSettings()
adjustCmsMenu()
redirect(url)
return None
The problem is that the first call to adjustCmsMenu() , the one outside any
function, does work, however, the one inside the router function doesn't
work. The items aren't appended to response.cms_menu
When I put the response.cms_menu.append() outside the function:
response.cms_menu = [['Home',request.controller=='cms' and
request.function=='index',URL('cms','index')]]
if session.cmsadmin_menu:
response.cms_menu.append(['Admin',request.controller=='cmsadmin',URL('cmsadmin','router')])
if session.cmsnode_menu:
response.cms_menu.append(['Basis',request.controller=='cmsnode',URL('cmsnode','index')])
if session.cmssite_menu:
response.cms_menu.append(['Site',request.controller=='cmssite',URL('cmssite','index')])
if session.cmsabout_menu:
response.cms_menu.append(['Over
ons/mij',request.controller=='cmsabout',URL('cmsabout','index')])
if session.cmscalendar_menu:
response.cms_menu.append(['Kalender',request.controller=='cmscalendar',URL('cmscalendar','index')])
The cms_menu displays alright, but I am always one step behind with the
items that should and shouldn't be displayed. Why doesn't this work?
Kind regards,
Annet.