In order to have some kind of conditionnal menu I do that :

menu_entry1 = [T('entry1',
             False,
             '', # First level goes no where
             [
             [T('sub1_1'),
                 False,
                 URL(request.application,
                 'CONTROLLER',
                 'FUNCTION/TABLE'),
                 []],
             [T('sub1_2'),
                 False,
                 URL(request.application,
                 'CONTROLLER',
                 'FUNCTION/TABLE'),
                 []],
         ]]

Etc.

if auth.has_membership('GROUP/ROLE'):
    response.menu = [menu_index,
        menu_entry1,
        menu_entry2,
        menu_entry_etc
    ]

Richard

On Tue, Jul 10, 2012 at 8:15 AM, villas <[email protected]> wrote:

> I also tried implementing menus based on a DB table so that I could
> display options which related to user permissions.  However,  in the end it
> became rather complicated and I decided it wasn't worth the effort and I
> went back to some kind of simple text representation.
>
> For simplicity,  I really like the plugin_wiki menu idea and would
> recommend that you also consider that method.  I found it is relatively
> easy to have a few different text menus which may be selected for each
> different user group.  When I thought about it,  I only need three menus so
> this is really easy to maintain.  The menus can still be kept in the DB.
>
> Sorry that this doesn't directly answer your question but it may have
> given you another idea  :)
> Regards,  David
>
>
>
>
> On Tuesday, July 10, 2012 11:22:06 AM UTC+1, Alan wrote:
>>
>> hi,
>>
>> wonder if i could have some input please on where im going wrong, spent a
>> few hours getting my head round this, but can't seem to get it right.
>>
>> taking inspiration from this: http://**wizardinternetsolutions.com/**
>> web-database-design/single-**query-dynamic-multi-level-**menu/<http://wizardinternetsolutions.com/web-database-design/single-query-dynamic-multi-level-menu/>
>>
>> I am trying to build up a array of elements that replicates the static
>> method in menus.py:
>>
>> response.ttt = db((db.page.showinmenu==1)&(db**.page.active==1)).select(
>> db.pa**ge.id, db.page.menutext, db.page.pageurl, db.page.parent, orderby=
>> db.page.parent|db.page**.sort|db.page.menutext)
>> response.tttmenu = [[],dict()]
>> for subpage in response.ttt:
>>     response.tttmenu[0].append({su**bpage.id: [subpage.menutext, subpage.
>> pageurl, subpage.parent]})
>>     if subpage.parent in response.tttmenu[1]:
>>         response.tttmenu[1][subpage.pa**rent].append(subpage.id)
>>     else:
>>         response.tttmenu[1][subpage.pa**rent] = [subpage.id]
>>
>> def buildmenu(parent, menu):
>>     html = ''
>>     if menu[1][parent]:
>>         html += '<ul>'
>>         for itemid in menu[1][parent]:
>>             if itemid in menu[1]:
>>                 html += str(menu[0][itemid])
>>                 #html += '<li>'+str(menu[0][itemid])
>>                 #html += buildmenu(menu[0][itemid][1][**0], menu)
>>                 html += '</li>'
>>             else:
>>                 #html += '<li>'+str(menu[0][itemid])+'<**/li>'
>>                 html += 'Badgers'
>>     html += '</ul>'
>>     return html
>>
>> response.tttnewmenu = buildmenu(0, response.tttmenu)
>>
>> so the first bit sticks the query results into a array, the page elements
>> into array index 0 as arrays and then the list of parents into array index
>> 1 as dictionaries for each element that has parents.
>> tttmenu outputs:
>>
>> [[{1: ['Home', 'home', 0]}, {3: ['page3', 'page3', 0]}, {2: ['page2',
>> 'page2', 1]}], {0: [1, 3], 1: [2]}]
>>
>> which seems right compared to the link above, but i just can't get the
>> second bit right.
>>
>> that is supposed to query through the parents dictionary keys and for
>> each array element inside the key, check if it is a parent and if so go
>> through the function again, so that it puts order into the output to the
>> same standard as the static response.menu example. the intention is to
>> replace all the html in the function and turn it into an array, but wanted
>> to walk through and get the code right.
>> The main problem i've got is calling the page array element 0 (the page
>> title) based on the dictionary key element that is being looped, just can't
>> get the syntax right no matter how much i try.
>>
>> any help would be greatly appreciated, even if you just tell me im doing
>> it wrong and should look at something else.
>>
>> was looking at doing things this way to first prevent too many database
>> queries on menu building and also to save having an additional table in the
>> database dedicated to the menu.
>>
>> all part of a cms im making and intend to release once it's any good.
>>
>> Thank you,
>>
>> Alan
>>
>>
>>

Reply via email to