Good work. You also have the option to do
{{=plugin_wiki.widget('jqgrid',table)}}
which is sortable, searchable, resizable, can reorder columns, ajax
pagination, etc.
On Nov 4, 4:38 pm, baloan <[email protected]> wrote:
> Final attempt. Much better now. web2py is cool!
>
> def history():
> headers, key = auto_orderby(db.email_archive,
> default_order=('desc', 'id'))
> emails = crud.select(db.email_archive, headers=headers,
> orderby=key, limitby=(0, 50))
> return dict(emails=emails)
>
> def auto_orderby(dal_table, default_order=None):
> '''
> Creates headers and key for crud.select() tables.
>
> @param tablename: dal table
> @param default_order: ('asc'|'desc', column_name)
> '''
> tablename = dal_table._tablename
> orderby_key = tablename + '_orderby'
> if default_order is None:
> default_order = ('asc', 'id')
> # create header column links
> headers = dict()
> for col in dal_table.fields:
> headers[tablename + '.' + col] = A(col,
> _href=URL(vars=dict(orderby=col)))
> # manage sort order
> if orderby_key not in session:
> session[orderby_key] = list(default_order)
> if 'orderby' in request.vars:
> if session[orderby_key][1] == request.vars.orderby:
> if session[orderby_key][0] == 'asc':
> session[orderby_key][0] = 'desc'
> else:
> session[orderby_key][0] = 'asc'
> else:
> session[orderby_key] = ['asc', request.vars.orderby]
> # convert to DAL orderby
> key = db.email_archive[session[orderby_key][1]]
> if session[orderby_key][0] == 'desc':
> key = ~key
> return (headers, key)
>
> Any suggestions for improvement?
>
> Regards, Andreas
>
> On Nov 4, 10:19 pm, baloan <[email protected]> wrote:
>
> > An updated attempt:
>
> > def index():
> > # create header column links
> > headers = dict()
> > for col in db.email_archive.fields:
> > headers['email_archive.' + col] = A(col,
> > _href=URL(vars=dict(orderby=col)))
> > # manage sort order
> > if 'email_archive_orderby' not in session:
> > session.email_archive_orderby = ['desc', 'id']
> > if 'orderby' in request.vars:
> > if session.email_archive_orderby[1] == request.vars.orderby:
> > if session.email_archive_orderby[0] == 'asc':
> > session.email_archive_orderby[0] = 'desc'
> > else:
> > session.email_archive_orderby[0] = 'asc'
> > else:
> > session.email_archive_orderby = ['asc',
> > request.vars.orderby]
> > # convert to DAL orderby
> > key = db.email_archive[session.email_archive_orderby[1]]
> > if session.email_archive_orderby[0] == 'desc':
> > key = ~key
> > emails = crud.select(db.email_archive, headers=headers,
> > orderby=key)
> > return dict(emails=emails)
>
> > On Nov 4, 10:06 pm, baloan <[email protected]> wrote:
>
> > > When I say ugly I mean:
> > > 1. too much duplication,
> > > 2. too much boilerplate code.
>
> > > Just imagine what happens if I apply my solution to more than a few
> > > tables.
>
> > > Regards, Andreas
>
> > > On Nov 4, 10:00 pm, baloan <[email protected]> wrote:
>
> > > > This is my feeble attempt at the problem - but it does the job:
>
> > > > def index():
> > > > add_submenu()
> > > > headers = {'email.id': A('Id',
> > > > _href=URL(vars=dict(orderby='id'))),
> > > > 'email.email': A('Email address',
> > > > _href=URL(vars=dict(orderby='email'))),
> > > > 'email.active':A('Active',
> > > > _href=URL(vars=dict(orderby='active'))),
> > > > 'email.expires':A('Expires',
> > > > _href=URL(vars=dict(orderby='expires'))),
> > > > 'email.change_user':A('Changed by',
> > > > _href=URL(vars=dict(orderby='change_user'))),
> > > > 'email.change_date':A('Changed on',
> > > > _href=URL(vars=dict(orderby='change_date'))),
> > > > }
> > > > if 'email_orderby' not in session:
> > > > session.email_orderby = ['asc', 'email']
> > > > if 'orderby' in request.vars:
> > > > if session.email_orderby[1] == request.vars.orderby:
> > > > if session.email_orderby[0] == 'asc':
> > > > session.email_orderby[0] = 'desc'
> > > > else:
> > > > session.email_orderby[0] = 'asc'
> > > > else:
> > > > session.email_orderby = ['asc', request.vars.orderby]
> > > > key = db.email[session.email_orderby[1]]
> > > > if session.email_orderby[0] == 'asc':
> > > > emails = crud.select(db.email, headers=headers, orderby=key)
> > > > else:
> > > > emails = crud.select(db.email, headers=headers, orderby= ~key)
> > > > return dict(emails=emails)
>
> > > > I don't like it - it looks ugly. Who can make it look more elegant?
>
> > > > Best regards, Andreas
> > > > [email protected]
>
>