I have a particular configuration.
I'm using an <exp:user:register>
form to register a user while at the same time adding a donation to a shopping cart using exp-ressso Store module.
Basically I have two forms. One of them gets submitted in Ajax (the Registration one), while copying over some values from the Store one. When the submit succeeds also the <exp:store:checkout>
form gets submitted.
I would have previously added the donation to the cart by using <exp:store:product
tag, reload the page with a #expanded hash in order to jquery .show the actual checkout form.
I like the fact that in two passages, the users of the charity website I'm developing have the chance to register and submit the donation.
Since I will be posting also a "donors list" page, I would like my users to be able to upload their avatar picture/logo which I will later post on the listing page. I was wondering I can I achieve this without having to rely on <exp:user:edit>
tag in a subsequent page/moment.
Here's my markup code:
{exp:channel:entries channel="cartoline" category="1"}
{exp:store:product
entry_id="{entry_id}"
form_class="importo-donazione importo"
form_id="importo"
return="cartoline/cartolina_autore#expand"
}
<input type="text" id="item_qty" name="item_qty" value="350,00"/>
<input type="submit" name="dona-ora" value="Dona ora!" />
{/exp:store:product}
{/exp:channel:entries}
and later on
<section id="form">
<div class="wrapper">
<h2>Inserisci i tuoi dati e procedi con la donazione</h2>
{exp:store:cart}
{if no_items}
<p>La tua donazione è stata annullata. Clicca <a href="{path="cartoline/cartolina_autore"}" style="color: #fff;">qui</a> per indicare un nuovo importo per questa donazione</p>
{/if}
<p class="thanks">Hai scelto di destinare <span>{order_total}</span> alla nostra causa! Grazie!</p>
{/exp:store:cart}
<div class="hidden">
{exp:store:checkout
payment_method="Paypal_Express"
return="thanks/ORDER_HASH"
require="billing_first_name|order_email"
form_id="store"
}
</fieldset>
<fieldset>
<label for="order_custom1">Ragione sociale</label>
<input class="username" type="text" value="{billing_first_name}" name="billing_first_name"/>
</fieldset>
<fieldset>
<label for="{order_email}">email</label>
<input class="email" type="text" value="{order_email}" name="order_email"/>
<input type="hidden" name="XID" value="{XID_HASH}" />
<input id="store-submit" type="submit" name="submit" value="invia" />
</fieldset>
{items}
{exp:channel:entries
entry_id="{entry_id}"
disable="pagination|categories|member_data|category_fields|custom_fields"
channel_short_name= "cartoline"}
{/exp:channel:entries}
{/items}
<input type="submit" name="empty_cart" value="Annulla" />
{/exp:store:checkout}
</div>
<div class="register-form">
{exp:user:register
form:id="registrazione"
return="site/index"
}
<input class="username" type="text" value="" name="username"/>
<input class="email" type="text" value="" name="email"/>
<input class="logo" type="file" name="logo" value=""/>
<input type="hidden" name="password" id="password" value="centronemo24" />
<input type="hidden" name="password_confirm" id="password_confirm" value="centronemo24" />
<input type="submit" value="procedi" name="submit"/>
{if no_results}
<p style="clear: both;">Ti sei già registrato per una donazione. Se vuoi farne un'altra, registrati come altro utente <a href="{path="logout"}">Logout</a></p>
{/if}
</div>
{/exp:user:register}
And this is the relevant jquery
$(document).ready(function() {
$("#store .email").blur(function(){
$("#registrazione .email").val(this.value);
});
$("#store .username").blur(function(){
$("#registrazione .username").val(this.value);
});
$("#store .logo").blur(function(){
$("#registrazione .logo").val(this.value);
});
// Get the hash of the page
var hashstring = window.location.hash.substring(1);
var found = false;
var checkedout = false;
// Do a hash exist?
if (hashstring.length > 0)
{
// Split the hash by '&'-sign (in case you have more variables in the hash, as I have)
var a = hashstring.split("&");
// Loop through the values
for (i = 0; i < a.length; i++)
{
// Split the string by '=' (key=value format)
var b = a[i].split("=");
// If the key is 'expand' (which tells us if the page is reloaded)
if(b[0] == 'expand')
{
found = true;
}
}
}
if(found)
{
$('#form').show();
$(document.body).animate({
'scrollTop': $('#form').offset().top
}, 2000);
$('#importo').hide();
$('#registrazione').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr('action'),
type: 'POST',
data: $(this).serialize(),
success: function() {
// duplicate fields from first form into second form
// as per whatever code you've already written
// submit second form
$('#store-submit').click();
}
});
});
I would like to add a field or something, in order to populate the avatar. I might also consider using a "guest" channel to post images and usernames along with e-mails, but since the member channel seems the most natural destination…
Do you have any thoughts? Thank you.