0

Hoping to get a bit of Cartthrob insight.

I'm wondering if it's possible to have a CT form which has different fields for Member information - for new member creation - and Billing information which is used for credit card processing.

For example if the new member's information being created during checkout is different from say the business credit card and billing information etc.

Same form inputs in my case just different functions (and therefore probably different input names)

I'm using Profile:edit. The P:E fields are mapped to CT (CT Member Settings) in the CP.

I know I can use inputs like the following where profile_website in custom_data array is a custom text field in the P:E profile channel that gets passed the value to the profile channel during checkout. This example would pass the website to the newly created member profile:

<input type="text" name="custom_data[profile_website]" value="" />

Some ideas I've thought about though, not totally sure what their outcomes would be:

  • Turn off CT Member drop down field mapping and use custom_data[] array on the Member Info section of the form to fill the profile channel entry for each profile field.

  • Use custom_data[] array on the Member Info section of the form and hope it overwrites the CT member drop down P:E field mapping after it hits in-turn changing all the details of the new member to that from the member inputs.

  • Use shipping address somehow for the member creation fields which I can map in the CT Member settings somehow.

I'm a bit surprised this isn't documented somewhere though, admittedly I'm a little tired and my google-foo is coming up short as is my brain for that matter.

Appreciate any thoughts!

1 Answer 1

2

Here's how we did this type of thing. The site uses the following checkout sequence, but using EE custom member fields and freemember rather than Profile Edit.

View Basket > Add customer details > Checkout confirm > Payment Gateway > Confirmation - with option to register

We've setup the member fields, giving them the same short names as the customer fields we've used in the orders channel. So our customer-details page looks like this:

{exp:cartthrob:save_customer_info_form 
        id="customer-details-form" 
        name="customer-details" 
        class="form-stacked" 
        required="first_name|last_name|address|city|state|zip|phone"
        return="checkout/confirmation" 
        }
        <input type="hidden" name="country_code" value="GBR">
        <input type="hidden" name="currency_code" value="GBP">

        <div class="billing-details-fields">

            <fieldset class="customer-details">
            <h3>Your details</h3>
            <p class="form-left-left">
                <label for="first_name">First name</label><br>
                <input type="text" name="first_name" id="first_name" placeholder="eg. John" {if logged_in}value="{first_name}"{/if}>
            </p>
            <p class="form-left-right">
                <label for="last_name">Last name</label><br>
                <input type="text" name="last_name" id="last_name" placeholder="eg. Smith" {if logged_in}value="{last_name}"{/if}>
            </p>
[...]
{/exp:cartthrob:save_customer_info_form}

The confirmation page literally outputs the cart table again with final totals for shipping, tax etc. The customer then goes off to pay off-site and returns to a success/fail page with the result of the transaction. Having collected all the customer details, we then ask them if they want to register (assuming they're not registered/logged out) - all they need to do is choose a password. We then use freemember to add their details into the member fields using hidden form fields with the values from the values saved to Cart Throb's cookies in the previous page.

{if logged_out}
{exp:low_variables:parse var="lv_create_account"}
<h2>{register_title}</h2>
{content}
{/exp:low_variables:parse}   

{exp:freemember:register return="checkout/complete" error_handling="inline" error_delimiters='<span class="error">|</span>'}     
<input type="hidden" name="country_code" value="GBR">
<input type="hidden" name="currency_code" value="GBP">
<input type="hidden" name="first_name" id="first_name" value="{first_name}">
<input type="hidden" name="last_name" id="last_name" value="{last_name}">
<input type="hidden" name="address" id="address" value="{address}">
<input type="hidden" name="company" id="company" value="{company}">
<input type="hidden" name="address2" id="address2" value="{address2}">
<input type="hidden" name="city" id="city" value="{city}">
<input type="hidden" name="state" id="state" value="{state}">
<input type="hidden" name="zip" id="zip" value="{zip}">
<input type="hidden" name="shipping_company" id="shipping_company" value="{shipping_company}">
<input type="hidden" name="phone" id="phone" value="{phone}">
<input type="hidden" name="order_customer_mobile" id="order_customer_mobile" value="{custom_data:order_customer_mobile}">
<input type="hidden" name="email" id="email" value="{email_address}">
<input type="hidden" name="use_billing_info" value="{use_billing_info}">
<input type="hidden" name="shipping_first_name" id="shipping_first_name" value="{shipping_first_name}">
<input type="hidden" name="shipping_last_name" id="shipping_last_name" value="{shipping_last_name}">
<input type="hidden" name="shipping_address" id="shipping_address" value="{shipping_address}">
<input type="hidden" name="shipping_address2" id="shipping_address2" value="{shipping_address2}">
<input type="hidden" name="shipping_city" id="shipping_city" value="{shipping_city}">
<input type="hidden" name="shipping_state" id="shipping_state" value="{shipping_state}">
<input type="hidden" name="shipping_zip" id="shipping_zip" value="{shipping_zip}">
<input type="hidden" name="shipping_phone" id="shipping_phone" value="{custom_data:shipping_phone}">
<input type="hidden" name="shipping_customer_mobile" id="shipping_customer_mobile" value="{custom_data:shipping_customer_mobile}">  

    <p>Choose a password to create your account.</p>
    <p>
        <label for="password">Password</label><br />
        {field:password}<br />
        {error:password}
    </p>
    <p>
        <label for="password_confirm">Confirm Password</label><br />
        {field:password_confirm}<br />
        {error:password_confirm}
    </p>

    <p>
        <input type="submit" value="Submit" class="big-btn">
    </p>

{/exp:freemember:register}
{/if}

I liked this approach because it took away the registration question from the checkout process, and invited it once the transaction was complete.

Hope this helps!

2
  • Thanks Andrew for sharing! I see what you are doing here and think that is a good option for after checkout registration though, if I'm thinking correctly, you are just "sessioning" the billing information for later where as I need to separate new member registration info from billing info.
    – Natetronn
    Apr 22, 2014 at 15:36
  • Guess I could do this but, not make the fields hidden. Then maybe give them a button to register using "Use Billing Address" info or something. Unfortunately this is a ticket selling setup so we also have forms to be filled out after checkout for each ticket as well and adding another form to the process after checkout is going to just confuse them that much more. Definitely food for thought...
    – Natetronn
    Apr 22, 2014 at 15:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.