If you don't want to use the nested load, you can also do this:

form = SQLFORM(db.mytable);

dialog = modal_wrapper(form, _id='*cont_id*', header='Header', 
footer='footer')

Works just fine.

On Friday, February 12, 2016 at 4:40:09 PM UTC-5, [email protected] 
wrote:
>
> I got to tell you...this is way more fun than Django. In django all I am 
> worried using that is the framework and url redirect. Here,  the least 
> thing to worry about is framework and I can focus more on the development 
> and logic! Add such a helpful community. Thank you for all your help!
>
> On Friday, February 12, 2016 at 4:36:56 PM UTC-5, [email protected] 
> wrote:
>>
>> Look at that!
>>
>> request.args(0)
>> '1'
>>
>> Thank you Val. This is great. 
>>
>> On Friday, February 12, 2016 at 4:25:18 PM UTC-5, [email protected] 
>> wrote:
>>>
>>> My bad. I forgot the my_util.py
>>>
>>> On Friday, February 12, 2016 at 4:10:00 PM UTC-5, Val K wrote:
>>>>
>>>> it's easy:
>>>> 1. Place modal_wrapper() function in  your_web2py_app/modUles  named 
>>>> 'my_util.py' (just for example) - you have to import html-helpers in it:  
>>>>
>>>> from gluon.html import *
>>>>
>>>>  2. In view place:
>>>> ...
>>>> {{=BUTTON( 'Apply',_type="button",_class = "btn 
>>>> btn-default",_onclick="$('#*cont_id*').modal('show')")}} 
>>>>
>>>> {{from my_util import *}}
>>>>
>>>> {{=modal_wrapper(   LOAD(f='*modal_content**.load*', *args=id,*   ajax=
>>>> True, ajax_trap=True  )  , _id='*cont_id*', header='Header', 
>>>> footer='footer')  }} 
>>>>
>>>> 3. Remove all about modal from main_page() 
>>>>
>>>>
>>>>
>>>> <[email protected]> писал(а) в своём письме Fri, 12 Feb 2016 
>>>> 23:40:08 +0300:
>>>>
>>>> What I mean by passing argument from the view to the controller is this 
>>>> (let us consider in my view):
>>>>
>>>>
>>>> (1) <td width="40%"><a 
>>>>  href="{{=URL('my_controler_def',args=id)}}">Apply</a></td>
>>>>
>>>> (2) <button 
>>>> onclick='window.open("{{=URL("my_controler_def",args=id)}}", 
>>>> "mywindow");'>Apply</button>
>>>>
>>>>
>>>> In the above (1) is calling that URL with an argument id. (2) is a 
>>>> button, when I click on that, it goes to the controller function 
>>>> my_controler_def, and in my_controler_def I will have that "id" argument 
>>>> passed on.
>>>>
>>>> I was hoping to do the same with the model. That with a button I can 
>>>> pass an argument from my view to the controller modal_content 
>>>>
>>>>
>>>>
>>>> On Friday, February 12, 2016 at 3:29:47 PM UTC-5, Val K wrote:
>>>>>
>>>>>
>>>>> OK,  but what do you mean under "pass that argument from my view" ?
>>>>> view is processed and rendered to html page at server side,   JS runs 
>>>>> only  on the client side.
>>>>> so, if you can pass arg from veiw (i.e. arg is defined on server 
>>>>> side), also  you can pass it in main_page():
>>>>>
>>>>> def main_page():
>>>>>
>>>>>     main_pg=DIV(<any your content>)
>>>>>     
>>>>>     m_cont = LOAD(f='*modal_content**.load*', *args=[1],*   ajax=True, 
>>>>> ajax_trap=True  )  # - must works, I'm sure while modal_content() 
>>>>> runs  "int(request.args(0)) == 1"  will be true
>>>>>    ...
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> <[email protected]> писал(а) в своём письме Fri, 12 Feb 2016 
>>>>> 23:04:08 +0300:
>>>>>
>>>>> What I have done with your code is change the contoller to be:
>>>>>
>>>>>
>>>>> def main_page():
>>>>>     main_pg=DIV('hello world')
>>>>>     m_cont = LOAD(f='modal_content.load', ajax=True, ajax_trap=True  ) 
>>>>>  
>>>>>     dialog = modal_wrapper(m_cont, _id='cont_id', header='Header', 
>>>>> footer='footer')
>>>>>     #show_modal_btn = BUTTON( 'Show modal',_type="button",_class = 
>>>>> "btn btn-default",_onclick=""" $('#cont_id').modal('show')   """)
>>>>>     #don't forget to add dialog and show_modal_btn to main page
>>>>>     #main_pg.append(show_modal_btn)   # or main_pg.append( 
>>>>> DIV(show_modal_btn)  ) or something else
>>>>>     main_pg.append(dialog)
>>>>>     return dict(main_pg = main_pg)
>>>>>
>>>>>
>>>>> And in my view I have (I am making an example here):
>>>>>
>>>>> {{extend 'layout.html'}}
>>>>> {{=main_pg}}
>>>>>
>>>>> {{=BUTTON( 'Apply',_type="button",_class = "btn 
>>>>> btn-default",_onclick="$('#cont_id').modal('show')")}}
>>>>>
>>>>> Works fine. Because I see the button and I click and see the pop up. 
>>>>> Great. Only issue is, I need to update the table with my argument. For 
>>>>> example:
>>>>>
>>>>> def modal_content():
>>>>>     db.mytable.id.default = request.args(0) #Just an example.
>>>>>     form = SQLFORM(db.mytable) # or even form = SQLFORM.grid(...)
>>>>>     return dict(form=form)
>>>>>
>>>>>
>>>>> So, I need to pass that argument from my view to the controller of the 
>>>>> form. Only thing I have at my disposal is the button. 
>>>>>
>>>>>
>>>>>
>>>>> On Friday, February 12, 2016 at 2:25:36 PM UTC-5, Val K wrote:
>>>>>>
>>>>>>
>>>>>> I mean passing args/vars in main_page(): 
>>>>>>
>>>>>> def main_page():
>>>>>>
>>>>>>     main_pg=DIV(<any your content>)
>>>>>>     
>>>>>>     m_cont = LOAD(f='*modal_content**.load*', *args=[ <list of your 
>>>>>> args>],  vars={<dict of your vars> }*,   ajax=True, ajax_trap=True  ) 
>>>>>>  
>>>>>>    ...
>>>>>>
>>>>>>
>>>>>>
>>>>>> But may be you want to pass something from client side, i.e. args 
>>>>>>  are defined by some user action.
>>>>>> What exactly do you want to do?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Friday, February 12, 2016 at 10:00:22 PM UTC+3, 
>>>>>> [email protected] wrote:
>>>>>>>
>>>>>>> In the book it says load in the view. Nothing in the controller.  I 
>>>>>>> was just wondering if we can add a button in the view and call the ajax 
>>>>>>> from the view with the argument. If we need to call the LOAD from the 
>>>>>>> view, 
>>>>>>> its
>>>>>>>
>>>>>>> {{=LOAD('default','manage_things',ajax=True)}}
>>>>>>>
>>>>>>> Then it fails for m_count. 
>>>>>>>
>>>>>>>
>>>>>>> On Friday, February 12, 2016 at 12:20:10 AM UTC-5, Val K wrote:
>>>>>>>>
>>>>>>>> LOAD() works like URL(), so,  to pass args/vars to modal_content 
>>>>>>>> you could write
>>>>>>>> m_cont = LOAD(f='*modal_content**.load*', *args=[ ],  vars={ }*,   
>>>>>>>> ajax=True, ajax_trap=True  )  # see LOAD in web2py book
>>>>>>>>
>>>>>>>> in modal_content controller there is nothing new, everything is as 
>>>>>>>> usual  
>>>>>>>> def modal_content():
>>>>>>>>    arg_0 = request.args(0)
>>>>>>>>    a = request.vars.a
>>>>>>>>
>>>>>>>>   
>>>>>>>>
>>>>>>>> On Friday, February 12, 2016 at 1:16:35 AM UTC+3, 
>>>>>>>> [email protected] wrote:
>>>>>>>>>
>>>>>>>>> Thank you! Val  and the app works great.
>>>>>>>>>
>>>>>>>>> One question:
>>>>>>>>>
>>>>>>>>> Instead of controller, I have the button displayed in the view as:
>>>>>>>>>
>>>>>>>>> {{=BUTTON( 'Apply',_type="button",_class = "btn 
>>>>>>>>> btn-default",_style="background-color:green;background-image:none",_onclick="""
>>>>>>>>>  
>>>>>>>>> $('#cont_id').modal('show')   """ )}}
>>>>>>>>>
>>>>>>>>> It works, however, I need to pass an argument to my controller 
>>>>>>>>> "modal_content". How do I  pass a request.args(0) from my view to the 
>>>>>>>>> controller in above? Just like I would do 
>>>>>>>>>
>>>>>>>>>  <button onclick='window.open("{{=URL("*modal_content*",args=
>>>>>>>>> something.id)}}", "mywindow");'>Apply</button>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Since I don't see the URL or callback to the javascript. Thanks in 
>>>>>>>>> advance.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thursday, February 11, 2016 at 4:27:22 PM UTC-5, Val K wrote:
>>>>>>>>>>
>>>>>>>>>> Hi!
>>>>>>>>>> Here is my solution.  I have modal_wrapper function. In 
>>>>>>>>>> controller file, I have two controllers -  main_page and 
>>>>>>>>>> modal_content: 
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> def *main_page*():
>>>>>>>>>>
>>>>>>>>>>     main_pg=DIV(<any your content>)
>>>>>>>>>>     
>>>>>>>>>>     m_cont = LOAD(f='*modal_content**.load*', ajax=True, 
>>>>>>>>>> ajax_trap=True  )  
>>>>>>>>>>
>>>>>>>>>>     dialog = modal_wrapper(m_cont, _id='*cont_id*', 
>>>>>>>>>> header='Header', footer='footer')
>>>>>>>>>>     
>>>>>>>>>>     show_modal_btn = BUTTON( 'Show modal',
>>>>>>>>>>                                                       
>>>>>>>>>>  _type="button",
>>>>>>>>>>                                                        _class = 
>>>>>>>>>> "btn btn-default",
>>>>>>>>>>                                                        
>>>>>>>>>> _onclick=""" $('#*cont_id*').modal('show')   """)
>>>>>>>>>>
>>>>>>>>>>     #don't forget to add dialog and show_modal_btn to main page
>>>>>>>>>>     main_pg.append(show_modal_btn)   # or main_pg.append( 
>>>>>>>>>> DIV(show_modal_btn) 
>>>>>>>>>>  ) or something else
>>>>>>>>>>     main_pg.append(dialog)
>>>>>>>>>>
>>>>>>>>>>        return dict(main_pg = main_pg)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> # keep in mind just one thing:
>>>>>>>>>> #   this controller is exposed by *.load, so it must return a 
>>>>>>>>>> dict of ONE element 
>>>>>>>>>> #   to return more than one element - wrap all in one DIV:
>>>>>>>>>> #   ret = DIV()
>>>>>>>>>> #   ret.append( ... ) 
>>>>>>>>>> #   ret.append( form )  
>>>>>>>>>> #      ret.append( ... )
>>>>>>>>>> #      return dict(ret = ret) 
>>>>>>>>>>
>>>>>>>>>> def *modal_content*():
>>>>>>>>>>     
>>>>>>>>>>     form = SQLFORM(...) # or even form = SQLFORM.grid(...)
>>>>>>>>>>
>>>>>>>>>>     return dict(form=form)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> # means bootstrap 3
>>>>>>>>>> def* modal_wrapper*(content, _id, header='', footer=''):
>>>>>>>>>>
>>>>>>>>>>     main_wrap = DIV('',  _class="modal fade",  _role="dialog", 
>>>>>>>>>> _id=_id, _tabindex="-1" )
>>>>>>>>>>     title_id = _id + '_title'
>>>>>>>>>>     main_wrap['_aria-labelledby']=title_id
>>>>>>>>>>
>>>>>>>>>>     dialog_div=DIV('', _class="modal-dialog" , _role="document")
>>>>>>>>>>     content_div=DIV('', _class="modal-content")
>>>>>>>>>>     header_div = DIV( _class="modal-header")
>>>>>>>>>>
>>>>>>>>>>     close_cross = BUTTON(
>>>>>>>>>>                         SPAN(XML('&times'), 
>>>>>>>>>> **{'_aria-hidden':"true"}),
>>>>>>>>>>                         _type="button",  _class="close",
>>>>>>>>>>                          data={'dismiss':"modal"},
>>>>>>>>>>                          **{'_aria-label':"Close"}
>>>>>>>>>>                          )
>>>>>>>>>>     title_h4 = H4( header,  _class="modal-title",  _id = title_id)
>>>>>>>>>>     body_div = DIV( content, _class="modal-body")
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>     close_btn = BUTTON('Close',  _type="button", _class="btn 
>>>>>>>>>> btn-default", data={'dismiss':"modal"})
>>>>>>>>>>     footer_div =  DIV( footer, close_btn, _class="modal-footer")
>>>>>>>>>>
>>>>>>>>>>     # gluon all
>>>>>>>>>>     main_wrap[0] = dialog_div
>>>>>>>>>>     dialog_div[0] = content_div
>>>>>>>>>>
>>>>>>>>>>     header_div.append(close_cross)
>>>>>>>>>>     header_div.append(title_h4)
>>>>>>>>>>
>>>>>>>>>>     [content_div.append(c) for c in (header_div, body_div, 
>>>>>>>>>> footer_div)]
>>>>>>>>>>     return main_wrap
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thursday, February 11, 2016 at 8:07:32 PM UTC+3, 
>>>>>>>>>> [email protected] wrote:
>>>>>>>>>>>
>>>>>>>>>>> Thank you for your answer Massimo. When I implemented this. 
>>>>>>>>>>>
>>>>>>>>>>> <button 
>>>>>>>>>>> onclick='window.open("{{=URL("my_view",args=something.id)}}", 
>>>>>>>>>>> "mywindow");'>Apply To This Post</button>
>>>>>>>>>>>
>>>>>>>>>>> It shows me a button and then I get redirected to another page. 
>>>>>>>>>>> I just wanted a pop up window open up with a form to submit that 
>>>>>>>>>>> user can 
>>>>>>>>>>> move around without being redirected to another page.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wednesday, February 10, 2016 at 10:51:11 PM UTC-5, Massimo Di 
>>>>>>>>>>> Pierro wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> I see you want a different window, not a modal.
>>>>>>>>>>>>
>>>>>>>>>>>> then you have to put the form logic in its own controller 
>>>>>>>>>>>> action and call it from js
>>>>>>>>>>>>
>>>>>>>>>>>> <button onclick="window.open("{{=URL('form_action)}}");">click 
>>>>>>>>>>>> me</button>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wednesday, 10 February 2016 18:00:44 UTC-6, 
>>>>>>>>>>>> [email protected] wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you for the answer Massimo. I did this like you said to 
>>>>>>>>>>>>> put the form in the body in index/popup.html however, it didn't 
>>>>>>>>>>>>> pop up like 
>>>>>>>>>>>>> the example in the link above. Instead I got it in the same 
>>>>>>>>>>>>> browser. I am 
>>>>>>>>>>>>> guessing my implementation is wrong.
>>>>>>>>>>>>>
>>>>>>>>>>>>> <div class="modal fade">
>>>>>>>>>>>>>   <div class="modal-dialog">
>>>>>>>>>>>>>     <div class="modal-content">
>>>>>>>>>>>>>       <div class="modal-header">
>>>>>>>>>>>>>         <button type="button" class="close" 
>>>>>>>>>>>>> data-dismiss="modal" aria-hidden="true">×</button>
>>>>>>>>>>>>>         <h4 class="modal-title">Modal title</h4>
>>>>>>>>>>>>>       </div>
>>>>>>>>>>>>>       <div class="modal-body">
>>>>>>>>>>>>>         
>>>>>>>>>>>>>           {{=form}}
>>>>>>>>>>>>>           
>>>>>>>>>>>>>       </div>
>>>>>>>>>>>>>       <div class="modal-footer">
>>>>>>>>>>>>>         <button type="button" class="btn btn-default" 
>>>>>>>>>>>>> data-dismiss="modal">Close</button>
>>>>>>>>>>>>>         <button type="button" class="btn btn-primary">Save 
>>>>>>>>>>>>> changes</button>
>>>>>>>>>>>>>       </div>
>>>>>>>>>>>>>     </div><!-- /.modal-content -->
>>>>>>>>>>>>>   </div><!-- /.modal-dialog -->
>>>>>>>>>>>>> </div><!-- /.modal -->
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wednesday, February 10, 2016 at 5:06:28 PM UTC-5, Massimo 
>>>>>>>>>>>>> Di Pierro wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Bootstrap3 has built-int modals: 
>>>>>>>>>>>>>> https://nakupanda.github.io/bootstrap3-dialog/
>>>>>>>>>>>>>> You can but {{=form}} in the body of the modal.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Tuesday, 9 February 2016 14:26:05 UTC-6, 
>>>>>>>>>>>>>> [email protected] wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hello, A new user migrating from Django to web2py and 
>>>>>>>>>>>>>>> absolutely loving it. A quick question. How do I use a light 
>>>>>>>>>>>>>>> box or a pop 
>>>>>>>>>>>>>>> up window to display a form in my view?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> for example in default/index.html
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> {{=form}}
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Want to show that form  in a pop up window.  
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -- 
>>>>> 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 a topic in the 
>>>>> Google Groups "web2py-users" group.
>>>>> To unsubscribe from this topic, visit 
>>>>> https://groups.google.com/d/topic/web2py/Y_TXPdRpDqQ/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to 
>>>>> [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Написано с помощью почтового клиента Opera: http://www.opera.com/mail/
>>>>>
>>>> -- 
>>>> 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 a topic in the 
>>>> Google Groups "web2py-users" group.
>>>> To unsubscribe from this topic, visit 
>>>> https://groups.google.com/d/topic/web2py/Y_TXPdRpDqQ/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to 
>>>> [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> Написано с помощью почтового клиента Opera: http://www.opera.com/mail/
>>>>
>>>

-- 
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/d/optout.

Reply via email to