If you are loading separate pages from the same site you may as well
redirect. Just use ajax to load small amounts of extra data within a
page.  Your design, your choice :)

Re: SMS.  I tried bulksms.com and it seemed really efficient,  but I
suppose an SMS service is best chosen depending on what region you are
targeting.

On Feb 17, 8:38 pm, Marc Smith <msmith...@gmail.com> wrote:
> On Thu, Feb 17, 2011 at 1:05 PM, villas <villa...@gmail.com> wrote:
> > My first impression was that seem a lot of code in one function.
> > Maybe better to create some separate functions and redirect depending
> > on the form no. etc.
>
> Sorry -- it started nice, but as I moved and tried different things,
> it got a bit messy.
>
>
>
> > Your other strategy of loading the forms via ajax looks promising,
> > but it looks like it would always load 'one' in the example given:
> > {{=LOAD(c='default', f='mobile_verify', args='one', extension='load',
> > ajax=True)}}
>
> Correct -- the first "page" (form one) it would always display is
> mobile_verify/one (the start of the "wizard").
>
>
>
> > I would recommend that you look at the admin app which comes with
> > web2py.  Look at the controller 'wizard.py' and check out the views
> > etc.  Spending a few minutes doing that may give you the inspiration
> > to take a slightly different approach.  At least in making your code a
> > little cleaner.
>
> Yes, their example is very nice -- using separate functions for the
> steps does make it look a lot cleaner, however, they aren't using the
> LOAD feature for the wizard (the browser goes to a new URL for each
> step).
>
> Maybe the LOAD / AJAX stuff just doesn't work with multiple steps /
> forms like I'm trying to do?
> Has anyone ever gotten it to work this way?
>
> Its not the end of the world, I can have the wizard go to new pages
> each time, but I just wanted to try something different. =)
>
> --Marc
>
>
>
> > -D
>
> > On Feb 17, 3:14 am, Marc Smith <msmith...@gmail.com> wrote:
> >> So, I've been experimenting with this a bit, and if I change the
> >> form_name.accepts methods to using arguments like this:
> >> form_name.accepts(request.vars, formname='blah1')
>
> >> It acts a bit differently -- first form (one) is displayed and
> >> accepted, and then second form (two) is displayed and when I fill in
> >> the field and hit submit, it takes me back to the first form?
>
> >> Is this proper use of the LOAD component, or should I not use my forms
> >> with this function?
>
> >> --Marc
>
> >> On Tue, Feb 15, 2011 at 2:50 PM, Marc Smith <msmith...@gmail.com> wrote:
> >> > Hi,
>
> >> > I am having trouble using the LOAD component with forms to produce a
> >> > "wizard" style multiple form type setup (eg, enter information on one
> >> > "screen", then go to the next, etc.).
>
> >> > If I move my mobile_verify.load file to mobile_verify.html and visit
> >> >http://localhost/myapp/default/mobile_verify/one--the form seems to
> >> > work fine. When I keep it as a .load and it loads up in my layout, the
> >> > first form works fine, I click submit and it goes to the next form,
> >> > but the second form seems to be "stuck". When I click submit on the
> >> > second form (mobile_verify/two), it brings me back to the same form.
> >> > It appears request.vars is empty and thats why the .accepts returns
> >> > false and keeps me on that form?
>
> >> > In my controller I have this:
> >> > --snip--
> >> > @auth.requires_login()
> >> > def mobile_verify():
> >> >    """
> >> >    Mobile phone number verification.
> >> >    """
> >> >    # Make the user's phone number look nice
> >> >    pretty_phone = '(' + auth.user.mobile[0:3] + ') '+ \
> >> >                 auth.user.mobile[3:6] + '-' + auth.user.mobile[6:10]
>
> >> >    if request.args(0) == 'one':
> >> >        # Form to pick verification method
> >> >        vrfy_method_form = FORM(FIELDSET(INPUT(_type='radio',
> >> > _name='verify_method',
> >> >                                               _value='SMS'),
> >> >                                         'Send me a text (SMS)
> >> > message'),
> >> >                                FIELDSET(INPUT(_type='radio',
> >> > _name='verify_method',
> >> >                                               _value='VOICE'),
> >> >                                         'Call (voice) my mobile
> >> > phone'),
> >> >                                CENTER(INPUT(_id='text_me_button',
> >> > _type='submit',
> >> >                                             _value='Text me!'),
> >> >                                       INPUT(_id='call_me_button',
> >> > _type='submit',
> >> >                                             _value='Call me!')))
>
> >> >        if vrfy_method_form.accepts(request.vars, session):
> >> >            #session.flash = 'vrfy_method_form accepted'
> >> >            session.verify_method = request.vars.verify_method
> >> >            redirect(URL('mobile_verify', args='two'))
>
> >> >        return dict(vrfy_method_form=vrfy_method_form,
> >> > page_title='blah',
> >> >                    pretty_phone=pretty_phone)
>
> >> >    elif request.args(0) == 'two':
> >> >        # Form to check verification code
> >> >        chk_code_form = FORM(CENTER(FIELDSET('Type the verification
> >> > code here:',
>
> >> > INPUT(_name='verify_code',
>
> >> > requires=IS_NOT_EMPTY())),
> >> >                                    FIELDSET(INPUT(_type='submit'))))
>
> >> >        if chk_code_form.accepts(request.vars, session):
> >> >            #session.flash = 'chk_code_form accepted'
> >> >            session.typed_code = str(request.vars.verify_code)
> >> >            redirect(URL('mobile_verify', args='three'))
>
> >> >        # Verification code
> >> >        code = random.randint(100000, 999999)
>
> >> >        return dict(pretty_phone=pretty_phone,
> >> > chk_code_form=chk_code_form,
> >> >                    code=code, page_title='blah')
>
> >> >    elif request.args(0) == 'three':
> >> >        return dict(page_title='blah', pretty_phone=pretty_phone)
> >> > --snip--
>
> >> > For my mobile_verify.load file:
> >> > --snip--
> >> > {{if request.args(0) == 'one':}}
> >> >        <h4>How should we verify your mobile phone number?</h4>
> >> >        <center>
> >> >                My mobile phone: <strong>{{=pretty_phone}}</strong>
> >> >                <br/>
> >> >                <a href="{{=URL('user', args='profile')}}">Wrong phone 
> >> > number?</a>
> >> >        </center>
> >> >        <br/>
> >> >        {{=vrfy_method_form}}
> >> >        <script>
> >> >                jQuery(document).ready(function() {
> >> >                        jQuery('#text_me_button').hide();
> >> >                        jQuery('#call_me_button').hide();
> >> >                        
> >> > jQuery('input[name="verify_method"]').change(function() {
> >> >                                if 
> >> > (jQuery('input[name="verify_method"]:checked').val() == 'SMS')
> >> > {
> >> >                                        jQuery('#call_me_button').hide();
> >> >                                        jQuery('#text_me_button').show();
> >> >                                } else {
> >> >                                        jQuery('#text_me_button').hide();
> >> >                                        jQuery('#call_me_button').show();
> >> >                                }
> >> >                        });
> >> >                });
> >> >        </script>
> >> > {{elif request.args(0) == 'two':}}
> >> >        {{if session.verify_method == 'SMS':}}
> >> >                {{#SendSMS(auth.user.mobile, code)}}
> >> >                An SMS text message has been sent to your mobile phone.
> >> >                {{=code}}
> >> >        {{else:}}
> >> >                {{#OriginateCall(auth.user.mobile, code)}}
> >> >                Your phone is ringing, please answer it.
> >> >                {{=code}}
> >> >        {{pass}}
> >> >        {{session.verify_code = str(code)}}
> >> >        {{=chk_code_form}}
> >> > {{elif request.args(0) == 'three':}}
> >> >        {{if session.typed_code == session.verify_code:}}
> >> >                <h4>Success!</h4>
> >> >                You should now add some contacts. Click <a 
> >> > href="{{=URL('auth_user',
> >> > args='manage_contacts')}}">here</a> to manage your contacts.
> >> >        {{else:}}
> >> >                <h4>Sorry, but the code you entered didn't work.</h4>
> >> >                Click <a href="{{=URL('auth_user', 
> >> > args='statistics')}}">here</a> to
> >> > try validating your phone again.
> >> >        {{pass}}
> >> > {{pass}}
> >> > --snip--
>
> >> > For the view that calls the LOAD function:
> >> > {{extend 'layout.html'}}
> >> > <div id="box3" class="box-style">
> >> >        <h2 class="title">{{=page_title}}</h2>
> >> >        <div class="content">
> >> >                {{if auth.user.phone_verified == False:}}
> >> >                        {{=LOAD(c='default', f='mobile_verify', 
> >> > args='one',
> >> > extension='load', ajax=True)}}
> >> >                {{else:}}
> >> >                        <p>blah</p>
> >> >                {{pass}}
> >> >        </div>
> >> > </div>
> >> > --snip--
>
> >> > Help! Any ideas are greatly appreciated.
>
> >> > Version 1.91.6 (2011-01-03 17:55:14)
>
> >> > --Marc
>
>

Reply via email to