Placeholders em Campos de SQLFORM
Olá, nesse post mostraremos uma forma simples mas bem útil de adicionar placeholders em SQLFORMs no web2py.
Um placeholder é aquela dica que fica dentro do input.
<input type="text" name="xyz" placeholder="Diga seu nome" />
Eles servem para auxiliar o usuário, há casos onde usar labels como complemento não fica legal, ou ocupa espaço. Então os placeholders entram como um auxiliar.
Uma maneira mais profissional e que está diretamente ligada no construtor Field de define_table são criar widgets customizados.
def widget(**kwargs): return lambda field, value, kwargs=kwargs: SQLFORM.widgets[field.type].widget(field, value, **kwargs)| |
db.define_table('reference', Field('is_enabled', 'boolean', default=True, label=T('Enabled')), Field('name', 'string', required=True,length=256, label=T('Name'),widget=widget(_placeholder='One-two word description', _readonly=False)), Field('title', 'string', required=True, length=512, label=T('Title'),widget=widget(_placeholder='e.g. Database Abstraction layer ', _readonly=False)) , Field('subtitle', 'string', length=512, label=T('Subtitle'),widget=widget(_placeholder='File name (.w2p) or short description', _readonly=False)), format='%(name)s' #' - ' '%(title)s ) |
Mas uma outra forma simples a nível de controller é usar o form.element.
form.element(_id='...')['_ placeholder']='...'
Imagine que você já tem toda uma estrutura criada, ou não é possível acessar o fonte do construtor de tabela. Logo a unica saída que resta é fazer o trabalho sujo no controller. Por isso a classe FORM do web2py nos disponibiliza um complemento, chamado form.element para acessarmos o DOM.
Ele serve para acessarmos elementos DOM do formulário depois de ele ter sido construído.
Vejamos tome como exemplo o código abaixo.
form = SQLFORM(db.reference)
Se quisermos acessar o campo nome dessa tabela precisamos usar:
form.element(_name='name')['_class'] = 'form-control text'
Dessa forma podemos acessar qualquer elemento de HTML a partir do form.
E o placeholder????
form.element(_name='name')['_placeholder'] = 'Seu nome completo'
Veja os elementos DOM são acessados por um dicionário sempre seguidos de um '_' antes do nome do elemento DOM, ele serve para diferenciarmos classes do web2py/python de HTML.
Um exemplo prático de como podemos adicionar isso de forma automatizada é o loop abaixo:
for e in db.reference.fields:
form.element(_name=e)['_placeholder'] = db.reference[e].label
Comentários
Postar um comentário