crear menú a partir del contenido de una tabla

27 views
Skip to first unread message

nicolás rosbaco

unread,
Feb 15, 2017, 9:53:12 PM2/15/17
to web2py-...@googlegroups.com
Hola compañeros/as, sigo preguntando.

Esta vez estoy editando el menú (desde menú.py) con response.menu.
Resulta que deseo formar un apartado que sea filtrar por categorías, y las categorías se seleccionan desde una tabla de la base de datos...

Con lo cual el menú se crea dinámicamente leyendo la tabla... la verdad no veo como manipular ese diccionario que es el menú (¿Esta bien lo que digo??? es un diccionario?)

Bueno compas muchas gracias y me quedo leyendo!!!!

Saludos




nicolás rosbaco

unread,
Feb 19, 2017, 8:45:39 PM2/19/17
to web2py-...@googlegroups.com
Por si le sirve a alguién más, les comparto como lo resolví (obvio que si hay otro modo me gustaría conocerlo):

La idea es, de acuerdo a las categorías registradas (están en una tabla de la base de datos) armar una opción de menú que es filtrar por categorías (son noticias)

response.menu = []
## acá armo dinámicamente la opción de listar por categorías
listaCategorias = db(db.categorias).select()
lista = []
for categoria in listaCategorias:
    texto = (XML(SPAN(categoria.nombre)),False, URL('default', 'index',vars=dict(cate=categoria.id)), [])
    lista.append(texto)

response.menu += [ (CAT(SPAN('Inicio'), False, URL('default', 'index'), [])),
                  (CAT(SPAN('',_class='glyphicon glyphicon-tags'),SPAN(' '),'categorías'), False, '#', lista),
                  (CAT(SPAN('',_class='glyphicon glyphicon-user'),'¿quiénes somos?'), False, URL('default', 'info'), []),
                  (CAT(SPAN('',_class='glyphicon glyphicon-envelope'),' contacto'), False, URL('contacto', 'index'), [])
]




Marco Mansilla

unread,
Feb 22, 2017, 12:08:18 AM2/22/17
to web2py-...@googlegroups.com
El Sun, 19 Feb 2017 22:45:37 -0300
nicolás rosbaco <anti...@gmail.com> escribió:

> Por si le sirve a alguién más, les comparto como lo resolví (obvio
> que si hay otro modo me gustaría conocerlo):
>
> La idea es, de acuerdo a las categorías registradas (están en una
> tabla de la base de datos) armar una opción de menú que es filtrar
> por categorías (son noticias)
>
> response.menu = []
> ## acá armo dinámicamente la opción de listar por categorías
> listaCategorias = db(db.categorias).select()
> lista = []
> for categoria in listaCategorias:
> texto = (XML(SPAN(categoria.nombre)),False, URL('default',
> 'index',vars=dict(cate=categoria.id)), [])
> lista.append(texto)
>
> response.menu += [ (CAT(SPAN('Inicio'), False, URL('default',
> 'index'), [])),
> (CAT(SPAN('',_class='glyphicon
> glyphicon-tags'),SPAN(' '),'categorías'), False, '#', lista),
> (CAT(SPAN('',_class='glyphicon
> glyphicon-user'),'¿quiénes somos?'), False, URL('default', 'info'),
> []), (CAT(SPAN('',_class='glyphicon glyphicon-envelope'),'
> contacto'), False, URL('contacto', 'index'), [])
> ]
>
>
>
>
>
> El 15 de febrero de 2017, 23:53, nicolás rosbaco <anti...@gmail.com>
> escribió:
>
> > Hola compañeros/as, sigo preguntando.
> >
> > Esta vez estoy editando el menú (desde menú.py) con response.menu.
> > Resulta que deseo formar un apartado que sea filtrar por
> > categorías, y las categorías se seleccionan desde una tabla de la
> > base de datos...
> >
> > Con lo cual el menú se crea dinámicamente leyendo la tabla... la
> > verdad no veo como manipular ese diccionario que es el menú (¿Esta
> > bien lo que digo??? es un diccionario?)
> >
> > Bueno compas muchas gracias y me quedo leyendo!!!!
> >
> > Saludos
> >
> >
> >
> >
> >
>
Hola Nico, hace un tiempo tuve que hacer algo parecido y el resultado
fue el siguiente:


# creacion de opciones en forma automatica consultando a la db
productos=[]
servicios=[]

for row in db(db.productos.id>0).select(orderby=db.productos.nombre):
productos.append(((T(row.nombre), False, URL('web','productos',
args=row.nombre.lower().replace(" ","")), [])))

for row in db(db.servicios.id>0).select(orderby=db.servicios.nombre):
servicios.append(((T(row.nombre), False, URL('web','servicios',
args=row.nombre.lower().replace(" ", "")), [])))

response.menu = [
(T('Inicio'), False, URL('web','index'), []),
(T('Productos'), False, '#', productos),
(T('Servicios'), False, '#', servicios),
(A(SPAN('Trabaja con nosotros',_class='trabajo'), False, '#', [])),
(A(I(_class='fa fa-envelope-o contacto'), False, '#', [])),
]

Es muy similar a la tuya como veras. A partir de los elementos de las
tablas de productos y servicios creo lo contenidos del menu repectivo.
Reply all
Reply to author
Forward
0 new messages