I think that there is an argument for incorporating my solution into the standard sqlform grid and having a flag for switching between the query system or my simple text search. If the table is being presented in a web application for the great web public then they are going to expect searches to be 'google like'.
Peter On Thursday, 19 July 2012 16:22:21 UTC+1, Richard wrote: > > 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) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >> >> >> >> > > --

