I think you don't have a clear "bigger picture" of all the pieces involved.
In order to update a component, you need to have it loaded somewhere you 
know inside the page.
This mean that there will be a certain div with id "iwillreload" inside 
your page that will point to the page that generates the grid.
In order to replace that component with a click on a link "outside" that 
"iwillreload" component, you NEED to tell to the link where you want that 
link to be loaded.

so, first of all, in your "main" page, you need to include a 

LOAD(c='default', f='thegrid.load', ajax=True, target='iwillreload')

This will create a div with id iwillreload inside your page, with 
default/thegrid.load called via ajax to fill this page "fragment".

To replace that component clicking on a link, with that link being the 
source of the wanted "new fragment", you need to do

A('click this', callback=URL('default', 'thegrid.load', 
vars=dict(something=else), user_signature=True), target="iwillreload")

i.e. you need to tell to A where would you want that url loaded.

Il giorno lunedì 14 ottobre 2013 12:02:28 UTC+2, Gael Princivalle ha 
scritto:
>
> Hi Niphlod.
>
> Now I use request.vars instead of request.args and it works, I don't have 
> anymore the flash "Not authorized" message.
> Here is the hp.load file:
>     {{=grid}}
>     {{=A('Test',callback=URL('hp.load', vars=dict(cat='a')))}}
>
> When I load only the hp.load file it works, but when I load it inside the 
> html file no, hp.load file reload without a query update (I have all rows).
>
> Do you know why ?
>
> .html file:
>     {{=grid}}
>     {{=A('Test',callback=URL('hp.load', vars=dict(cat='a')))}}
>
> Controller hp.py:
> def hp():
>     db.models.pdf_path.readable = False
>     if request.vars['cat']:
>         cat_to_show=str(request.vars['cat'])
>         query = db.models.category==str(cat_to_show)
>         response.flash = 'Category to show is ' + cat_to_show
>     else:
>         query = db.models
>         response.flash = 'Request.vars[cat] is empty, show all rows'
>     fields = 
> (db.models.code,db.models.category,db.models.description_it,db.models.pdf_path)
>     headers = {'models.code':   T('Product model'),
>            'models.category': T('Category'),
>            'models.description_it': T('Description'),
>            'models.pdf_path': 'pdf_path' }
>     links = [dict(header=T('Catalogue'), body=lambda row: A('Download', 
> _href=row.pdf_path, _target='_blank'))]
>     maxtextlengths={'models.code': 6, 'models.description_it': 120}
>     grid = SQLFORM.grid(query, headers=headers, fields=fields, csv=False, 
> maxtextlengths=maxtextlengths, orderby=db.models.code, 
> links=links,links_in_grid=True)
>     return dict(grid=grid)
>
> Il giorno domenica 13 ottobre 2013 20:33:22 UTC+2, Niphlod ha scritto:
>>
>> grid uses signed links by default (otherwise, you could access all data 
>> just changing the url). Make sure that all links fiddling with grid "own" 
>> links (such as lining directyl to the edit action of some record) are 
>> signed. 
>> Also, grid uses request.args to detect what you're trying to do, so if 
>> you want to use something like /app/default/index/whatever as a "base url", 
>> you should pass also args=request.args[:1] to tell the grid that it should 
>> only consider what comes after the "whatever".
>>
>>
>> On Sunday, October 13, 2013 8:24:15 PM UTC+2, Gael Princivalle wrote:
>>>
>>> Tim, Niphlod thank you for your answers. @Niphlod "Luke" means that's 
>>> I'm a skywalker ? I would like to ! 
>>> Components are pretty useful, I've tried the documentation tutorial, 
>>> that's ok.
>>> I'm still having some problems on this topic.
>>> 1/My left side bar is under the grid
>>> 2/I don't reach to give some args to the grid. As args I've just got to 
>>> give a category number. I've made a test link with "1". If I load only the 
>>> .load file clicking on the link it show al rows. With the .load file inside 
>>> the .html file, it returns me this message "not authorized".
>>>
>>> Here is my hp.load file in a dedicated component folder called hp:
>>> {{left_sidebar_enabled=True,}}
>>> {{=grid}}
>>> <!-- Here I've made a test link for showing rows that have 1 for 
>>> category. In the future all the vertical side menu will have similar links 
>>> --> 
>>> {{=A('Test',callback=URL('hp.load', args='1'))}}
>>> {{block left_sidebar}}
>>> <!--...My left side menu -->
>>>
>>> My dedicated controller hp.py:
>>> def hp():
>>>     #I don't want to show this field. I'm gone take care of it under 
>>> with the lambda function
>>>     db.models.pdf_path.readable = False 
>>>     if request.args(0): #If there's an arg, it means that I have to make 
>>> a query with this category number
>>>         query = db.models.category==request.args(0)
>>>     else: #Else, I have to show all rows
>>>         query = db.models
>>>     fields = 
>>> (db.models.code,db.models.category,db.models.description_it,db.models.pdf_path)
>>>     #I set my headers
>>>     headers = {'models.code':   T('Product model'),
>>>            'models.category': T('Category'),
>>>            'models.description_it': T('Description'),
>>>            'models.pdf_path': 'pdf_path' }
>>>     #Here I take care about pdf_path for having a link on it.
>>>     links = [dict(header=T('Catalogue'), body=lambda row: A('Download', 
>>> _href=row.pdf_path, _target='_blank'))]
>>>     maxtextlengths={'models.code': 6, 'models.description_it': 120}
>>>     #Here is my construction grid
>>>     grid = SQLFORM.grid(query, headers=headers, fields=fields, 
>>> csv=False, maxtextlengths=maxtextlengths, orderby=db.models.code, 
>>> links=links,links_in_grid=True)
>>>     return dict(grid=grid)
>>>
>>> My h_products.html view:
>>> {{extend 'layout.html'}}
>>> {{=LOAD('hp','hp.load',ajax=True)}}
>>>
>>> How can I resolve these problems ?
>>>
>>> Il giorno giovedì 10 ottobre 2013 20:45:45 UTC+2, Tim Richardson ha 
>>> scritto:
>>>>
>>>> A web2py component will make the grid controlled by ajax, which means 
>>>> you can reload it from your page with javascript when some event happens, 
>>>> and that reloading is done the ajax way, without reloading the entire 
>>>> page. 
>>>> And there's more. Read about components in the book.
>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to