why are you asking?
On 4 jun, 20:41, "Elcimar L. Santos" <[email protected]> wrote:
> Where are you from Hans?
>
> Atenciosamente,
>
> Elcimar Leandro
>
> 2009/6/4 Hans Donner <[email protected]>
>
>
>
> > Yep, forms the base for what I needed.
>
> > made a small patch to extend it a bit, the patch includes some doc
> > updates as well.
>
> > This allows for:
>
> > {{extend 'layout.html'}}
> > Registration form
>
> > {{lbl=form.custom.label}}
> > {{wid=form.custom.widget}}
> > {{=form.custom.form.start}}
> > <table>
> > <tbody>
> > {{for f in form.fields:}}
> > {{if step==1:}}<tr>{{pass}}
> > <td>{{=f}}</td>
> > <td>{{=lbl[f]}}</td>
> > <td>{{=wid[f]}}</td>
> > {{step=step+1}}
> > {{if step==2:}}</tr>{{step=1}}{{pass}}
> > {{pass}}
> > </tr>
> > </tbody>
> > </table>
>
> > {{=form.custom.submit}}
> > {{=form.hidden_fields()}}
> > {{=form.custom.form.close}}
>
> > I've not yet managed to get {{=form.hidden_fields()}} in to
> > {{=form.custom.form.close}}
>
> > === modified file 'web2py/gluon/sqlhtml.py'
> > --- web2py/gluon/sqlhtml.py 2009-05-31 18:42:23 +0000
> > +++ web2py/gluon/sqlhtml.py 2009-06-04 16:56:52 +0000
> > @@ -2,7 +2,7 @@
> > # -*- coding: utf-8 -*-
>
> > """
> > -This file is part of web2py Web Framework (Copyrighted, 2007)
> > +This file is part of web2py Web Framework (Copyrighted, 2007-2009)
> > Developed by Massimo Di Pierro <[email protected]>
> > License: GPL v2
> > """
> > @@ -289,13 +289,22 @@
> > nbsp = XML(' ') # Firefox2 does not display fields with blanks
> > FORM.__init__(self, *[], **attributes)
> > ofields = fields
> > +
> > + # if no fields are provided, build it from the provided table
> > + # will only use writable or readable fields, unless forced to
> > ignore
> > if fields == None:
> > fields = [f for f in table.fields if \
> > ignore_rw or table[f].writable or table[f].readable]
> > self.fields = fields
> > +
> > + # make sure we have an id
> > if not 'id' in self.fields:
> > self.fields.insert(0, 'id')
> > +
> > self.table = table
> > +
> > + # try to retrieve the indicated record using its id
> > + # otherwise ignore it
> > if record and isinstance(record, (int, long, str, unicode)):
> > records = table._db(table.id == record).select()
> > if records:
> > @@ -303,6 +312,7 @@
> > else:
> > record = None
> > self.record = record
> > +
> > self.record_id = None
> > self.trows = {}
> > xfields = []
> > @@ -311,43 +321,57 @@
> > self.custom.dspval = Storage()
> > self.custom.inpval = Storage()
> > self.custom.label = Storage()
> > + self.custom.comment = Storage()
> > + self.custom.widget = Storage()
> > + self.custom.linkto = Storage()
> > +
> > for fieldname in self.fields:
> > if fieldname.find('.') >= 0:
> > continue
> > field = self.table[fieldname]
> > +
> > if comments:
> > comment = col3.get(fieldname, field.comment) or ''
> > else:
> > comment = ''
> > + self.custom.comment[fieldname] = comment
> > +
> > if labels != None and fieldname in labels:
> > label = labels[fieldname]
> > else:
> > label = str(field.label) + ': '
> > self.custom.label[fieldname] = label
> > +
> > field_id = '%s_%s' % (table._tablename, fieldname)
> > label = LABEL(label, _for=field_id, _id='%s__label' % field_id)
> > row_id = field_id + '__row'
> > if fieldname == 'id':
> > self.custom.dspval.id = nbsp
> > self.custom.inpval.id = ''
> > + widget = ''
> > if record:
> > if showid and 'id' in fields and field.readable:
> > v = record['id']
> > + widget = SPAN(v, _id=field_id)
> > self.custom.dspval.id = str(v)
> > - xfields.append(TR(label, SPAN(v, _id=field_id),
> > + xfields.append(TR(label, widget,
> > comment, _id='id__row'))
> > self.record_id = str(record['id'])
> > + self.custom.widget.id = widget
> > continue
> > +
> > if record:
> > default = record[fieldname]
> > else:
> > default = field.default
> > +
> > cond = readonly or \
> > (not ignore_rw and not field.writable and field.readable)
> > if default and not cond:
> > default = field.formatter(default)
> > dspval = default
> > inpval = default
> > +
> > if cond:
>
> > # ## if field.represent is available else
> > @@ -391,11 +415,16 @@
> > continue
> > else:
> > inp = self.widgets.string.widget(field, default)
> > +
> > tr = self.trows[fieldname] = TR(label, inp, comment,
> > _id=row_id)
> > xfields.append(tr)
> > self.custom.dspval[fieldname] = dspval or nbsp
> > self.custom.inpval[fieldname] = inpval or ''
> > + self.custom.widget[fieldname] = inp
> > +
> > + # if a record is provided and found, as is linkto
> > + # build a link
> > if record and linkto:
> > for (rtable, rfield) in table._referenced_by:
> > query = urllib.quote(str(table._db[rtable][rfield]
> > @@ -405,28 +434,47 @@
> > continue
> > if labels and lname in labels:
> > lname = labels[lname]
> > - xfields.append(TR('', A(lname, _class='reference',
> > + widget = A(lname, _class='reference',
> > _href='%s/%s?query=%s' % (linkto,
> > - rtable, query)), col3.get(olname, ''
> > + rtable, query))
> > + xfields.append(TR('', widget, col3.get(olname, ''
> > ), _id='%s__row' % olname.replace('.'
> > , '__')))
> > + self.custom.linkto[olname.replace('.', '__')] = widget
> > +
> > + # when deletable, add delete? checkbox
> > + self.custom.deletable = ''
> > if record and deletable:
> > + widget = INPUT(_type='checkbox', _class='delete',
> > + _id='delete_record',
> > + _name='delete_this_record')
> > xfields.append(TR(LABEL(delete_label, _for='delete_record',
> > - _id='delete_record__label'),
> > - INPUT(_type='checkbox', _class='delete',
> > - _id='delete_record',
> > - _name='delete_this_record'),
> > + _id='delete_record__label'), widget,
> > col3.get('delete_record', ''),
> > _id='delete_record__row'))
> > + self.custom.deletable = widget
> > + # when writable, add submit button
> > + self.custom.submit = ''
> > if not readonly:
> > - xfields.append(TR('', INPUT(_type='submit',
> > - _value=submit_button),
> > + widget = INPUT(_type='submit',
> > + _value=submit_button)
> > + xfields.append(TR('', widget,
> > col3.get('submit_button', ''),
> > _id='submit_record__row'))
> > + self.custom.submit = widget
> > + # if a record is provided and found
> > + # make sure it's id is stored in the form
> > if record:
> > if not self['hidden']:
> > self['hidden'] = {}
> > self['hidden']['id'] = record['id']
> > +
> > + form = Storage()
> > + (form.start, form.close) = self._xml()
> > + form.start = XML("<%s %s>" % (self.tag, form.start))
> > + form.close = XML("%s</%s>" % (form.close, self.tag))
> > + self.custom.form = form
> > +
> > self.components = [TABLE(*xfields)]
>
> > def accepts(
> > @@ -579,7 +627,6 @@
> > self.vars.id = self.table.insert(**fields)
> > return ret
>
> > -
> > class SQLTABLE(TABLE):
>
> > """
> > @@ -673,7 +720,10 @@
>
> > def form_factory(*fields, **attributes):
> > + """
> > + generates a SQLFORM for the given fields.
> > +
> > + Internally will build a non-database based data model to hold the
> > fileds.
> > + """
> > return SQLFORM(SQLDB(None).define_table('no_table', *fields),
> > **attributes)
> > -
> > -
>
> > 2009/6/4 Hans Donner <[email protected]>:
> > > Seems to be it, thanks.
>
> > > 2009/6/4 David Marko <[email protected]>:
>
> > >> Do you mean something like this?
> >http://web2py.com/AlterEgo/default/show/205
>
> > >> David
>
> > >> On 4 čvn, 11:12, Hans Donner <[email protected]> wrote:
> > >>> Currently SQLFORM renders a complete table for the fields provided (or
> > >>> all) for a db.table, and does some other magic as well.
>
> > >>> Would love to reuse the magic, but be in more control of the
> > >>> rendering. Eg, would like to specify what fields are placed where, and
> > >>> if they should include labels or not etc.
> > >>> What fields are to be rendered where should be easiliy done form the
> > template.
>
> > >>> (the underlying table is quite big, and when all is listed like it is
> > >>> now it's too overwhelming. A different layout makes it far more better
> > >>> (esp when throwing in some ajax), eg having some sort of matrix,
> > >>> having some labels only for rows and columns vs for every field)
>
> > >>> Any suggestions?
> > >>> I'm digging in the code, and find that the fields and the rendering
>
> ...
>
> meer lezen >>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---