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() 
>
>
>
> <billmac...@gmail.com <javascript:>> писал(а) в своём письме 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
>>    ...
>>
>>
>>
>>
>> <billmac...@gmail.com> писал(а) в своём письме 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, billmac...@gmail.com 
>>> 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, billmac...@gmail.com 
>>>>> 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, 
>>>>>>> billmac...@gmail.com 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, 
>>>>>>>>> billmac...@gmail.com 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, billmac...@gmail.com 
>>>>>>>>>>> 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 
>> web2py+un...@googlegroups.com.
>> 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 
> web2py+un...@googlegroups.com <javascript:>.
> 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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to