I was working on a set menu from the database. It's simple and it can be
useful.
The model is simple, and has a condition to evaluate options when
generating the menu items.
The evaluation was done using the function 'eval'.
Attach model.
To manage SQLFORM.grid use or what you like

db.define_table('menu',
                Field('posicion',type='integer'),
                Field('titulo',type='string'),
                Field('controlador',type='string'),
                Field('funcion',type='string'),
                Field('padre'),
                Field('condicion'),
               )
db.menu.padre.requires = IS_IN_DB(db, db.menu.id,'%(titulo)s')
db.menu.padre.represent = lambda id,row: db.menu(id).titulo
db.menu.condicion.default = 'True'

response.title = settings.title
response.subtitle = settings.subtitle
response.meta.author = '%(author)s <%(author_email)s>' % settings
response.meta.keywords = settings.keywords
response.meta.description = settings.description
response.menu = [ ]


def add_item(nivel):
    item = []
    for itemmenu in db((db.menu.padre == nivel) & (db.menu.id >
1)).select(orderby=db.menu.posicion):
        if eval(itemmenu.condicion):

item.append([itemmenu.titulo,None,URL(itemmenu.controlador,itemmenu.funcion),add_item(
itemmenu.id) ])
    return item

if auth.is_logged_in():
    response.menu = add_item(1)


On Thu, Apr 12, 2012 at 1:00 AM, Cliff <cjk...@gmail.com> wrote:

> I have something like this working:
>
> sub_menu = []
> if (auth.user_id != None) and ((auth.has_membership(role = 'admin'))):
>     sub_menu = [('Admin',  False,  URL('admin')), ]
> response.menu = [('Home', False, URL('home','default','index'), []),
>     (SPAN('Price List',_style='color:yellow'), True,
> URL('pricelist','default','index'),
>     [('Guideline',  False,  URL('pricelist','default','guideline')),
>      ('Multiplier Tables',  False,
>  URL('pricelist','default','multitable')),
>      ('Cut Charge Tables',  False,  URL('pricelist','default','cuttable')),
>      (sub_menu),
>     ])]
>
> On Wednesday, April 11, 2012 12:24:29 PM UTC-4, Omi Chiba wrote:
>>
>> The following menu works. It's add "Admin" menu next to "Price List" if
>> the user has role "admin". Now, I want to add the "Admin" menu as sub-menu
>> of "Price List" where it's right after the "Cut Charge Tables". How can I
>> do this ?
>>
>> response.menu = [('Home', False, URL('home','default','index'), []),
>>     (SPAN('Price List',_style='color:yellow'), True,
>> URL('pricelist','default','**index'),
>>     [('Guideline',  False,  URL('pricelist','default','**guideline')),
>>      ('Multiplier Tables',  False,  URL('pricelist','default','**
>> multitable')),
>>      ('Cut Charge Tables',  False,  URL('pricelist','default','**
>> cuttable')),
>>     ])]
>>
>> if (auth.user_id != None) and ((auth.has_membership(role = 'admin'))):
>>     response.menu += [('Admin',  False,  URL('admin')), ]
>>
>

Reply via email to