Thanks for this I had not noticed that clear did not work, I guess I never
use it.
The problem is a type in the search_form function
The fifth line should read
id = 'search_text'),
not id='searchText'),
Does anyone know if I can edit the first message in this topic so as to
correct it?
Peter
On Wednesday, 18 July 2012 15:30:59 UTC+1, Elcimar wrote:
>
>
> 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)
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
--