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
>>
>>
>>