I think it will solve one of the issue I had with using sqlform.grid in place of sqltable + Datatables. Since Datatables has a pretty simple search/filter and my users knows how to use it than I would not remove this kind of easy search/filter functionality and leave them with only a harder more complex solution, so I stick with sqltable + Datatables even if sqlform.grid is much more interesting...
Thank Peter. Richard On Thu, Jul 19, 2012 at 11:00 AM, peter <[email protected]> wrote: > 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 <http://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) >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> -- > > > > --

