First of all notice that if you use web2py2.8.2 you can do this:
db.define_table('store_catalog',
Field('title'),
Field('slug',requires=IS_SLUG(),compute=lambda row:
IS_SLUG.urlify(row.title)),
Field('parent_id','reference store_catalog'))
def menu_rec(items): return
[(x.title,None,URL('action',args=x.slug),menu_rec(x.children)) for x in
items or []]
response.menu = menu_rec(db(db.store_catalog).select().as_tree())
And you get a recursive menu with arbitrary depth and a web interface to
edit it with slugs.
On Tuesday, 21 January 2014 00:11:59 UTC-6, James Burke wrote:
>
> Hi,
>
> I managed to get one working a little while ago doing this. This has been
> adapted for your situation, may require some tweaking:
>
> _tables.py - model
> db.define_table('store_catelog')
>
>
> db.define_table('store_catelog',
> Field('title', 'string'),
> Field('description', 'text'),
> Field('parent_catelog', 'reference store_catelog', default=None),
> format='%(title)s',
> redefine=True)
>
> menu.py - model
> response.menu = []
>
> categories = db(db.store_catelog.parent == None).select(orderby=db.
> store_catelog.id)
>
> for category in categories:
> response.menu+=[ (T(category.title), True if active_page == str(
> category.title.lower()) else False, URL('default','page/%s' % (category.
> title.lower())), [
> (T(i.title), True if active_page == str(i.id) else False, URL(
> 'default','page/%s' % (i.id)), []) for i in db((db.stored_category.parent
> == category.id)).select(db.store_category.ALL) if i.parent == category.id
> ]) ]
>
> The query returns any categories without a parent and adds them to the
> menu. While doing so looks for any subcategories using the category as a
> parent.
>
> Hope that helps you out.
>
> -James
>
> On Tuesday, January 21, 2014 9:33:50 AM UTC+13, [email protected] wrote:
>>
>>
>> Hi all,
>>
>> I have been trying for a little over 2 weeks to figure this out...
>>
>> I'm trying to generate a menu that drops down, I have been able to
>> statically create it by overwriting sample app that has the same drop down
>> menu like the web2py.com site.
>>
>> I have this in my db.py:
>> db.define_table('store_catalog',
>> Field('maincategory', 'string'),
>> Field('subcategory', 'string'),
>> Field('description', 'text'))
>>
>>
>> in my menu.py I have gotten this so far:
>> response.menu=[]
>> response.menu.append([T('Catalog'), False, '',
>> [(T('%s' % menucatchoice['maincategory']), False, 'link',
>> [(T('%s' % menucatchoice['subcategory']), False,
>> 'link'),]) for menucatchoice in rows ] ])
>>
>> It gets me a drop down menu except that for each subcategory it repeats
>> adding it to the main category. Let's say there is only 1 main category and
>> 2 subs that go after that
>> Catalog (this just shows with the caret next to it as intended)
>> MainCategory
>> Sub
>> Sub
>> What I have does put the "Catalog" for the first but, what I get is:
>> MainCategory
>> (blank)
>> MainCategory(don't want this it's being repeated)
>> Subcategory
>> MainCategory(and this one is also a repeat)
>> Subcategory
>>
>> I have tried to break out the response.menu with so many different
>> .appends it's not funny. I have also tried adding the "[-1]". This was
>> the closest I have gotten to what I want it to look like. I'm at an
>> absolute loss on this, any and all help would be greatly appreciated.
>>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.