Works like a charm, but the "Clear" button is working exactly like the
"Search" one, without clearing 'search_text' before submit
Is there another method to do that?
Em segunda-feira, 16 de abril de 2012 23h32min49s UTC-3, Cliff Kachinske
escreveu:
>
> Good one.
>
> You earned a browser bookmark.
>
> Thanks.
>
> On Wednesday, March 7, 2012 4:44:00 AM UTC-5, peter wrote:
>>
>> As I have commented before, sqlform.grid has a particular way of
>> searching. Its combination of search and 'queries' is very powerful.
>> However the search does not really work in the way a casual web user
>> might expect. If entered - Bob Dylan - in the search box and clicked
>> search, then one get 'invalid query'. I eventually worked out how to
>> change the search widget, so as I believe this is currently
>> undocumented I thought I would share it. The semantics I have chosen
>> for search are that it will return records where any of the specified
>> fields (fielda and fieldb in the example) contain all of the words in
>> the search field. i.e if the search term is -Bob Dylan- it will return
>> records that have both Bob and Dylan in the fieldA or both in fieldb.
>>
>> Define a search function that creates the form and a function that
>> does the search
>>
>> def search_form(self,url):
>> form = FORM('',
>>
>> INPUT(_name='search_text',_value=request.get_vars.search_text,
>> _style='width:200px;',
>> _id='searchText'),
>> INPUT(_type='submit',_value=T('Search')),
>> INPUT(_type='submit',_value=T('Clear'),
>> _onclick="jQuery('#search_text').val('');"),
>> _method="GET",_action=url)
>>
>> return form
>>
>> def search_query(tableid,search_text,fields):
>> words= search_text.split(' ') if search_text else []
>> query=tableid<0#empty query
>> for field in fields:
>> new_query=tableid>0
>> for word in words:
>> new_query=new_query&field.contains(word)
>> query=query|new_query
>> return query
>>
>> Then in the function that has the sqlform.grid call, before the call
>> add
>>
>> search_text=request.get_vars.search_text
>> query=search_query(db.tablea.id,search_text,
>> [db.tablea.fielda,db.tablea.fieldb])
>> ...
>> # the query could now be combined with other queries.
>>
>> table=SQLFORM.grid(query, search_widget=search_form........)
>>
>> return dict(table=table)
>>
>>
>>
>>
>>
>>
>>
>>
>>
--